忽略NULL值的2个不同列的(值)不在

时间:2015-02-18 18:39:09

标签: sql sql-server tsql where-in

我有一组值(ID),我想使用"而不是"在我的查询中

如果我使用

select ...
where ColumnA not in (1234, ...,...,...,..more than 3000 values -IDs)

它可以工作但是......但返回第2行的结果集。

我还有第二个B列,并希望在此列中查看查询

ColumnA  ColumnB

1234     NULL
NULL     1234

我希望"不在"看起来在两列但我相信NULL值使我的查询不起作用

我希望结果说...没有返回行

OR条款不起作用:

select ...
where ColumnA not in (1234) or ColumnB not in (1234)

返回第1行和第2行。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

select ColumnA, ColumnB
from SomeDatabase
where ISNULL(ColumnA, 0) not in (1234)
and ISNULL(ColumnB, 0) not in (1234);

答案 1 :(得分:1)

我建议:

select t.*
from table t
where 1234 not in (coalesce(columnA, -1), coalesce(columnB, -1));

这允许您在查询中仅包含一次常量值。

答案 2 :(得分:1)

declare @ids table
{
    id int
}

insert into @ids (id)
values
(1),
(2),
(3),
(4),
...

select *
from table
where
    ColumnA is not null and not in (select id from @ids)
and ColumnB is not null and not in (select id from @ids)