У меня есть таблица SQL со строками, и каждая строка имеет (среди прочего) два столбца, которые связаны между собой.По сути, представьте себе такую структуру:
A | B | Data
--|------|-----
1 | NULL | ...
2 | 1 | ...
3 | 2 | ...
Как видите, некоторые значения в столбце A
существуют в столбце B
, но не все: для A
= 3
нет строки, которая имеет B
= 3
.
Структура имеет специальность, что каждое значение в A
и B
встречается только один раз, и в основном структура выглядит так: Каждыйзапись «указывает» на идентификатор другой записи, так что это в основном связанный список.
Теперь я хочу найти строку, значение столбца которой A
не имеет значения, совпадающего с любым другим B
column.
В данной демонстрационной таблице этот запрос должен вернуть запись с A
= 3
.
Если в таблице всего одна строка, я хочучтобы получить эту единственную строку в результате, хотя ссылки не существует.
Если в таблице нет строки, запрос должен вернуть NULL
.
Я уже пытался использовать SELECT … WHERE NOT IN
, но это не работает со значениями NULL
по желанию.Я также пытался SELECT … WHERE NOT EXISTS
: у него нет проблемы NULL
, но он очень медленный для больших таблиц.
Поэтому мой вопрос: есть ли эффективный способ найти строку, которую я ищуи если да, то как выглядит этот запрос?
PS: я не запрашиваю конкретную базу данных, поэтому в основном стандарт SQL в порядке.Если есть действительно хорошее решение для конкретной хорошо известной базы данных (такой как MariaDB, PostgreSQL, SQL Server,…), я также был бы заинтересован в конкретных решениях для них, но, вообще говоря, я ищу общий способрешить эту проблему.