Альтернатива НЕ СУЩЕСТВУЕТ - PullRequest
2 голосов
/ 30 апреля 2010

У меня есть две таблицы, связанные столбцом идентификатора. Давайте назовем их таблицей A и таблицей B. Моя цель - найти все записи в таблице A, которые не имеют записей в таблице B. Например:

**Table A:**  
ID    Value  
--    -------
1     value1  
2     value2  
3     value3  
4     value4

**Table B**  
ID    Value  
--    -------
1     x  
2     y  
4     z  
4     l

Как видите, запись с ID = 3 не существует в таблице B, поэтому я хочу запрос, который даст мне запись 3 из таблицы A. В настоящее время я делаю это, говоря: AND NOT EXISTS (SELECT ID FROM TableB where TableB.ID = TableA.ID) Поскольку таблицы огромны, производительность на этом ужасна. Кроме того, когда я попытался использовать левое соединение, где TableB.ID имеет значение null, это не сработало. Кто-нибудь может предложить альтернативу?

Ответы [ 3 ]

4 голосов
/ 30 апреля 2010

Попробуйте Not IN

AND tablea.id NOT In (SELECT ID FROM TableB)

проверить больше http://www.java2s.com/Code/SQLServer/Select-Query/NOTIN.htm

1 голос
/ 17 июня 2015

Вы можете заменить его на

SELECT 
  a.ID, 
  a.Value
FROM Table_A AS a
LEFT JOIN Table_B AS b ON a.ID = b.ID     
WHERE b.ID IS NULL

Это решение должно быть более эффективным, чем альтернативы IN() и EXISTS(). Источник здесь

0 голосов
/ 06 февраля 2012
SELECT ID 
  FROM Table_A
EXCEPT
SELECT ID 
  FROM Table_B; 
...