В той же таблице проверяется значение одного столбца и проверяется существующее значение в другом столбце

У меня есть таблица, я хочу написать запрос T-SQL, который выбирает значение Parent id из таблицы, а затем проверяет это значение в столбце Design ID.

Моя таблица такая: имя таблицы Tbl_project:

Мне нужно проверить, отсутствуют ли какие-либо Parent ID в столбце Design ID. В этом сценарии Parent ID = 50 отсутствует в столбце Design ID, поэтому я хочу заполнить только это значение.

Я попробовал выполнить дополнительный запрос, но не получил ожидаемого результата

Даже если это небольшая таблица, пожалуйста, не загружайте изображения кода/данных/ошибок, задавая вопрос. «Я попробовал выполнить подзапрос, но не получил ожидаемого результата» — вы забыли указать эту попытку и объяснить, почему она не сработала. Вы также не включаете сюда ожидаемые результаты.

Thom A 29.08.2024 13:25

Что вы пробовали и что не сработало так, как ожидалось? В стороне... Если цель состоит в том, чтобы поддерживать ссылочную целостность, внешний ключ, возвращающийся к той же таблице, будет выполнять это активно при вставке/обновлении записей.

David 29.08.2024 13:35

@ThomA отметил, что ожидаемый результат: я хочу показать родительский идентификатор: 50, потому что это значение не существует в столбце Design OF.

user3262364 29.08.2024 13:50

Есть ли причина, по которой у вас нет этого ограничения FK? Таким образом, он изначально перейдет в плохое состояние...

Dai 29.08.2024 13:55

Попробуйте что-нибудь вроде select parentid from yourtable t where not exists(select 1 from yourtable t2 where t2.designid = t.parentid)

siggemannen 29.08.2024 13:58

Это запрос, который я пробовал: «выберите p1.parant_id из Tbl_project p1, где p1.parant_id отсутствует (выберите идентификатор p2.design из проекта p2)

user3262364 29.08.2024 13:58

@siggemannen большое спасибо, все работает нормально.

user3262364 29.08.2024 14:12

@ user3262364, запрос NOT IN также будет работать должным образом, если ни одно из значений designid не равно NULL.

jarlh 29.08.2024 14:35

Вы также можете попробовать select ParantID from tbl_project group by ParantID having count (case when ParantID = DesignID then 1 end) = 0; запросить таблицу только один раз. Я не знаю, быстрее ли это, потому что требует группировки. Возможно зависит от индексов.

Jonas Metzler 29.08.2024 18:12
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
9
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать EXCEPT, чтобы вернуть эти значения:

select Parent_ID from the_table
except
select Design_ID from the_table
Ответ принят как подходящий

Другой вариант — использовать подзапрос в предложенииwhere.

select p.parantid 
from   tbl_project p 
where not exists (select 1 from tbl_project p2 where p2.designid = p.parantid);

См. этот dbFiddle

Другие вопросы по теме