Я пытаюсь получить уникальный список значений из таблицы, которая отсутствует в соответствующих столбцах в других 2 таблицах (несколько таблиц)
Вот как выглядит мой стол:
----------- ----------- -----------
Table1 Table2 Table3
---|------- ---|------- ---|-------
id | Value id | Value id | Value
---|------- ---|------- ---|-------
1 | A 1 | A 1 | A
2 | B 2 | C 2 | D
3 | C 3 | D 3 | E
4 | D 4 | G 4 | F
Теперь уникальным значением таблицы 1 является "B" (это значение отсутствует в Таблицах 2 и Таблице 3).
Подобным же уникальным значением таблицы 2 является "G". Подобным же уникальным значением таблицы 3 является "E, F".
Я использую следующий запрос:
select Value from Table1 where Table1.Value NOT IN (select Value from Table2);
Любая идея, как распространиться на 2 таблицы (или больше)?
Спасибо
Вы также можете использовать левые соединения здесь:
SELECT t1.Value
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.Value = t2.Value
LEFT JOIN Table3 t3
ON t1.Value = t3.Value
WHERE
t2.Value IS NULL AND t2.Value IS NULL;
Используйте and
:
select Value
from Table1
where Table1.Value not in (select Value from Table2) and
Table1.Value not in (select Value from Table3) ;
Я препятствую использованию NOT IN
с подзапросами. Он не ведет себя так, как вы ожидали бы со значениями NULL
. Если какое-либо значение в подзапросе равно NULL
, все строки отфильтровываются.
Вместо этого используйте NOT EXISTS
:
select t1.Value
from Table1 t1
where not exists (select 1 from table2 t2 where t2.value = t1.value) and
not exists (select 1 from table3 t3 where t3.value = t1.value);