Как использовать SQL JOIN - PullRequest
0 голосов
/ 02 февраля 2012
Table A 
(id, name)
1  | alice
2  | bob

Table B
(a_id, last_name)
1    | in wonderland

Я хочу знать SQL-запрос (с использованием объединений), чтобы получить результат "элементов в A, которые не связаны с B"

a.2|a.bob

Ответы [ 5 ]

6 голосов
/ 02 февраля 2012

Левое внешнее объединение объединяет две таблицы и возвращает нулевые значения для второй таблицы в JOIN, если нет строки, соответствующей условию соединения.После этого вы просто указываете в своем предложении WHERE фильтр, указывающий, что вы хотите только записи, в которых записи объединенной таблицы равны нулю.

SELECT A.id
FROM A
LEFT JOIN B
    ON B.a_id = A.id
WHERE B.a_id IS NULL
4 голосов
/ 02 февраля 2012
select a.name, b.last_name
from a left outer join b on a.id = b.a_id
where b.a_id is null
3 голосов
/ 02 февраля 2012

Вы также можете использовать NOT EXISTS

SELECT A.id,A.name FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE a_id=A.id)
2 голосов
/ 02 февраля 2012

Я бы не стал здесь:

SELECT id, name FROM A WHERE id not in (SELECT a_id FROM b)
0 голосов
/ 02 февраля 2012
SELECT id, name 
  FROM Table_A 
EXCEPT 
SELECT id, name 
  FROM Table_A 
       INNER JOIN Table_B    
          ON id = a_id;

Из принятого ответа следует, что проекция name не требуется, поэтому вышесказанное может быть упрощено:

SELECT id
  FROM Table_A 
EXCEPT 
SELECT id
  FROM Table_B;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...