NOT IN Select 语句返回 0 个值
NOT IN Select statement returning 0 values
我有变量 ID 和代码的数据。示例数据如下所示:
ID Code
abc 00
def 00
ghi 00
def 23
jkl 00
mno 20
pqr 24
ID可以有多个不同代码的值。我正在尝试计算出每个 ID 的所有可能的代码组合(总共有 15 个)
我的代码:
select id, code from data.test
where id in (select id from data.test where code = 00 )
and id in ('abc','def','ghi','jkl','mno','pqr')
工作正常(returning 4 行)但是这个代码:
select id, code from data.test
where id not in (select id from data.test where code = 23)
and id in ('abc','def','ghi','jkl','mno','pqr')
returns 0 行?它应该 return 3 行。
我正在使用 Teradata SQL 助手版本 15.00.0.02。
如有任何帮助,我们将不胜感激。
子查询 not in
失败的一个原因是其中一个值(在您的情况下为 id
)是 NULL
。在这种情况下,NOT IN
表达式永远不会 returns 为真。解决此问题的一种方法:
select id, code
from data.test
where id not in (select id from data.test where code = 23 and id is not null) and
id in ('abc', 'def', 'ghi', 'jkl', 'mno', 'pqr')
另一种方法是使用 NOT EXISTS
:
select t.id, t.code
from data.test t
where not exists (select 1 from data.test t2 where t.code = 23 and t2.id = t.id) and
t.id in ('abc', 'def', 'ghi', 'jkl', 'mno', 'pqr')
我有变量 ID 和代码的数据。示例数据如下所示:
ID Code
abc 00
def 00
ghi 00
def 23
jkl 00
mno 20
pqr 24
ID可以有多个不同代码的值。我正在尝试计算出每个 ID 的所有可能的代码组合(总共有 15 个)
我的代码:
select id, code from data.test
where id in (select id from data.test where code = 00 )
and id in ('abc','def','ghi','jkl','mno','pqr')
工作正常(returning 4 行)但是这个代码:
select id, code from data.test
where id not in (select id from data.test where code = 23)
and id in ('abc','def','ghi','jkl','mno','pqr')
returns 0 行?它应该 return 3 行。
我正在使用 Teradata SQL 助手版本 15.00.0.02。
如有任何帮助,我们将不胜感激。
子查询 not in
失败的一个原因是其中一个值(在您的情况下为 id
)是 NULL
。在这种情况下,NOT IN
表达式永远不会 returns 为真。解决此问题的一种方法:
select id, code
from data.test
where id not in (select id from data.test where code = 23 and id is not null) and
id in ('abc', 'def', 'ghi', 'jkl', 'mno', 'pqr')
另一种方法是使用 NOT EXISTS
:
select t.id, t.code
from data.test t
where not exists (select 1 from data.test t2 where t.code = 23 and t2.id = t.id) and
t.id in ('abc', 'def', 'ghi', 'jkl', 'mno', 'pqr')