Присоединиться слева ИСКЛЮЧИТЬ совпадающие записи? - PullRequest
0 голосов
/ 14 октября 2019

Традиционное левое объединение возвращает все записи из левой таблицы, включая соответствующие записи:

enter image description here

Я хочу использовать объединение для исключить совпадающих записей и вернуть только несовпадающие записи из левой таблицы:

enter image description here

Показано ниже,код, который я придумал до сих пор.
В нем используется выражение WHERE, чтобы отсеять совпадающие записи - но это как-то не так.
Это лучший способ сделать это? Или есть лучший способ эксклюзивного соединения?

SELECT L.col1 ,
       L.col2 ,
FROM leftTable L
LEFT JOIN rightTable R ON R.col1 = L.col1
WHERE R.id IS NULL ;

Ответы [ 3 ]

6 голосов
/ 14 октября 2019

Метод LEFT JOIN в порядке. Это оптимизировано во многих базах данных. Лично я предпочитаю NOT EXISTS, потому что я думаю, что это более кратко:

SELECT L.col1, L.col2
FROM leftTable L
WHERE NOT EXISTS (SELECT 1 FROM rightTable R WHERE R.col1 = L.col1);

То есть логика находится в одном месте (выражение NOT EXISTS), а не распределена по двум пунктам запроса.

1 голос
/ 14 октября 2019

Нет ничего плохого в использовании подхода левого соединения, на самом деле это стандартный подход, и большинство людей используют этот способ, чтобы исключить записи и инкрементные вставки в некоторых случаях

1 голос
/ 14 октября 2019

Используйте Except для интерпретации

   Select * from table t LEFT JOIN 
     TABLE1 t1
   On t.id=t1.id
   Except
 SELECT * FROM TABLE1
...