У меня есть ниже таблице:SQL Server: NOT IN в пункте, где не работает с NVARCHAR
DECLARE @P AS TABLE
(
ID int,
PID int,
PNAME NVARCHAR(30),
PARENT_PNAME NVARCHAR(30),
Error int
)
INSERT INTO @P VALUES
(554,1,'AAAA',NULL,0),
(554,2,'BBBB',NULL,0),
(554,3,'CCCC',NULL,0),
(554,4,'DDDD','AAAA',0),
(554,5,'EEEE','AAAA',0),
(554,6,'FFFF',NULL,0),
(554,7,'GGGG',NULL,0),
(554,8,'HHHH',NULL,0),
(554,9,'IIII',NULL,0),
(554,10,'JJJJ',NULL,0),
(554,11,'KKKK',NULL,0);
Если я запускаю ниже запроса:
select ID, PID, PNAME, PARENT_PNAME, Error
from @P
where PNAME not in (select PARENT_PNAME
from @P
where PNAME is not null)
AND PARENT_PNAME IS NOT NULL
Я не получаю ничего, никакого результата. Почему «NOT IN» не работает?
мне нужно, чтобы получить два ниже строки:
(554,4,'DDDD','AAAA',0)
(554,5,'EEEE','AAAA',0)
На стороне записки: с, например, данные, условие 'где PNAME не является нулевым 'не имеет никакого эффекта, потому что все PNAME не равны нулю. –
Возможный дубликат значений [NOT IN и NULL] (http://stackoverflow.com/questions/129077/not-in-clause-and-null-values) –
Ответ Чанукки правильный (и он был первым, кто написал правильное решение, так что +1 для этого). Он не объясняет, почему условие NOT IN не возвращает никаких результатов. Причина в том, что некоторые значения 'PARENT_PNAME' ноль, поэтому они не могут использоваться в операторе' NOT IN'. который всегда будет возвращать false. –