У меня есть таблица, я хочу написать запрос T-SQL, который выбирает значение Parent id
из таблицы, а затем проверяет это значение в столбце Design ID
.
Моя таблица такая: имя таблицы Tbl_project
:
Мне нужно проверить, отсутствуют ли какие-либо Parent ID
в столбце Design ID
. В этом сценарии Parent ID = 50
отсутствует в столбце Design ID
, поэтому я хочу заполнить только это значение.
Я попробовал выполнить дополнительный запрос, но не получил ожидаемого результата
Что вы пробовали и что не сработало так, как ожидалось? В стороне... Если цель состоит в том, чтобы поддерживать ссылочную целостность, внешний ключ, возвращающийся к той же таблице, будет выполнять это активно при вставке/обновлении записей.
@ThomA отметил, что ожидаемый результат: я хочу показать родительский идентификатор: 50, потому что это значение не существует в столбце Design OF.
Есть ли причина, по которой у вас нет этого ограничения FK? Таким образом, он изначально перейдет в плохое состояние...
Попробуйте что-нибудь вроде select parentid from yourtable t where not exists(select 1 from yourtable t2 where t2.designid = t.parentid)
Это запрос, который я пробовал: «выберите p1.parant_id из Tbl_project p1, где p1.parant_id отсутствует (выберите идентификатор p2.design из проекта p2)
@siggemannen большое спасибо, все работает нормально.
@ user3262364, запрос NOT IN также будет работать должным образом, если ни одно из значений designid не равно NULL.
Вы также можете попробовать select ParantID from tbl_project group by ParantID having count (case when ParantID = DesignID then 1 end) = 0;
запросить таблицу только один раз. Я не знаю, быстрее ли это, потому что требует группировки. Возможно зависит от индексов.
Вы можете использовать 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
Даже если это небольшая таблица, пожалуйста, не загружайте изображения кода/данных/ошибок, задавая вопрос. «Я попробовал выполнить подзапрос, но не получил ожидаемого результата» — вы забыли указать эту попытку и объяснить, почему она не сработала. Вы также не включаете сюда ожидаемые результаты.