2015-03-12 4 views
0

У меня есть две таблицы A и таблица B, общий столбец в обеих таблицах - Name, Я хочу знать, что такое имя в таблице A, которая не находится в таблице BЗапрос T-SQL: где column not in дает неверный результат

, когда я делаю:

Select Name from A where Name not in (Select Name from B) 

Я уверен, что есть 2 имя в таблице а, не в таблице B

но результат ничего не возвращает

это имя столбца I n таблицы A и B имеют тот же тип данных varchar(50)

поэтому я копирую результат столбца Name и вставляю в новую таблицу и выполняю тот же запрос, и на этот раз возвращает правильный результат. Какая ошибка может быть?

пример:

Table A 
Name: 
Kevin 
Dexter 
David 
John 
Marry 

Table B 
Name: 
Kevin 
Dexter 
David 

Так что запрос должен вернуть 'John', 'Marry' но она не возвращается в моей исходной таблице, но она возвращается в другую таблицу, которую я создаю и вставки.

Спасибо!

+0

Спасибо Marc_s для редактирования своего поста так что это более читаемо – user3399111

ответ

4

У вас, вероятно, есть имя NULL на B, это делает NOT IN ложным для каждой строки. Вы должны использовать NOT EXISTS вместо:

SELECT Name 
FROM A 
WHERE NOT EXISTS (SELECT 1 FROM B 
        WHERE A.Name = B.Name) 
+0

Вы правы, я нашел нулевое значение в этом столбце, спасибо большое! – user3399111

0
SELECT a.Name 
FROM TableA a 
LEFT JOIN TableB b ON b.Name = a.Name 
WHERE b.Name IS NULL 
+0

спасибо, что ответило – user3399111

1

Очевидно, что из-за значения NULL на некоторых строках в таблице B. Вы можете сделать то, что вы хотите с EXCEPT

SELECT Name FROM TableA 
EXCEPT 
SELECT Name FROM TableB 
+0

спасибо, что ответили – user3399111

Смежные вопросы