Как использовать sql соединение, где в table1 есть строки, которых нет в table2 - PullRequest
0 голосов
/ 28 ноября 2010

У меня есть две таблицы record и share. record имеет столбцы: name и id. share имеет столбцы id.

Я хочу найти строки, которые присутствуют в record, но отсутствуют в share.

Как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 28 ноября 2010

У вас есть эти таблицы: ЗАПИСЬ (ID, ИМЯ) ДОЛЯ (ID, значение) * * тысяча одна

Если ваш движок SQL поддерживает ЛЕВЫЕ ВНЕШНИЕ СОЕДИНЕНИЯ, лучший способ:

SELECT RECORD.* FROM RECORD LEFT OUTER JOIN SHARE WHERE RECORD.ID=SHARE.ID
WHERE SHARE.ID IS NULL

Важно
разместить индекс на SHARE.ID

Как это работает:
SQL Engine охватывает всю таблицу RECORD, ищущую запись в SHARE, для каждой записи в RECORD, если найдена «связанная» запись в SHARE, где условие where равно false, поэтому запись не включается в набор результатов, если нет записей находятся в разделе share, где условие true, а RECORD. * включен в набор результатов. Это работает благодаря LEFT OUTER JOIN.

Примечание:
Другой способ сделать то же самое - использовать WHERE RECORD.ID NOT IN (ВЫБЕРИТЕ ID ИЗ SHARE). Обратите внимание, что в зависимости от используемого вами механизма sql это может привести к серьезным проблемам с производительностью, поскольку внутренний механизм может запускать (SELECT ID FROM SHARE) один раз для каждой записи в таблице RECORD.

2 голосов
/ 28 ноября 2010

SQL LEFT JOIN возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений

SELECT name, id
FROM record r LEFT JOIN share s on r.id = s.id
WHERE s.id is null
1 голос
/ 28 ноября 2010

выберите идентификатор из t1, где идентификатор не указан (выберите идентификатор из t2)

0 голосов
/ 29 ноября 2010

SELECT * из RECORD, где ID не указан (SELECT DISTINCT ID FROM SHARE);

SELECT DISTINCT ID FROM SHARE - получит все различные идентификаторы в общей папке таблицы

SELECT * from RECORD, где идентификатор не указан (SELECT DISTINCT ID FROM SHARE); будет отображать все записи, идентификатор которых отсутствует в первом запросе.

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