Получить значения из одной таблицы, которых нет в другой - PullRequest
0 голосов
/ 31 мая 2018

Первый запрос работает для получения значения из t1, которого нет в t2.

select t1.*
from table1 t1
where t1.id = '1'
and t1.id2 not in (select t2.id2 from table2 t2 where t2.id='1')

Но как мне сделать то же самое, используя этот формат вместо внутреннего выбора?

select t1.*
from table1 t1, table2 t2
where t1.id = '1'
and t2.id = t1.id
and t1.id2 != t2.id2

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете использовать LEFT OUTER JOIN:

select t1.*
from table1 t1
   LEFT OUTER JOIN table2 t2
      ON t1.id = t2.id
WHERE t2.id IS NULL

LEFT OUTER JOIN говорит, что нужно взять все результаты из таблицы LEFT-Most (здесь * table1) и только те результаты из вашей объединенной таблицы (table2 здесь), которые соответствуют условию ON.Фильтруя в предложении WHERE, чтобы отбрасывать любые результаты, где table2.id IS NULL, вы фактически оставляете только T1 результаты, которые не соответствуют T2.

Также старайтесь держаться подальше от типа неявного соединения FROM table1, table2.Это очень старая школа.INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN - лучшие варианты практически для любой ситуации.

...