-
25-09-2019 - |
题
我有一个无法正常工作的查询
Q1:
SELECT id, name
FROM vw_x
WHERE id NOT IN (select pid from table_x)
GROUP BY id, name
Having max(c_date) > GETDATE()
Q2:
SELECT id, name
FROM vw_x
GROUP BY id, name
Having max(c_date) > GETDATE()
即使我知道这些ID不在table_x Q2中,Q1也没有返回任何内容
我的查询可能出了什么问题?
解决方案
您的表格中有无效的值
尝试这个
SELECT id, name
FROM vw_x
WHERE id NOT IN (select pid from table_x where pid is not null)
GROUP BY id, name
Having max(c_date) > GETDATE()
或这个
SELECT id, name
FROM vw_x
WHERE NOT EXISTS (select 1 from table_x where pid = vw_x.id )
GROUP BY id, name
Having max(c_date) > GETDATE()
也可以看看 从另一表不存在的表中选择所有行
其他提示
使用左联接怎么样?
SELECT id, name
FROM vw_x
LEFT JOIN table_x on id = pid
WHERE pid IS NULL
GROUP BY id, name
Having max(c_date) > GETDATE()
还有另一种情况:子查询可能不会返回。如果不在子句返回null列表,则SQL Server无法正常工作。我的查询如下:
select * from table where id not in (select id from tableB where somecondition(x))
当子查询包含ID列表时,查询将根据预期返回数据。但是,当子查询一无所获时,查询仍然会返回数据,但随后被卡住了。
我将查询更改为以下问题,并解决了问题:
select * from table where id not in (select id from tableB where somecondition(x) **union all select 0**)
确保子查询将至少包含一个数字。
不隶属于 StackOverflow