我有一个无法正常工作的查询

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**)

确保子查询将至少包含一个数字。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top