0

这是我的 CTE/SQL 语句:

with cte as (
    ...
)

select 1, 0, q.quadrantID, 0, '', 1
from Quadrants q
where q.quadrantID not in (select cte.quadrantID from cte)
order by quadrantID ASC

Quadrants 表有 6 条记录。

此场景中的 CTE 不返回任何记录。我的选择应该从象限返回 6 条记录,但它没有。这是为什么?

如果我运行以下语句:

select 1, 0, q.quadrantID, 0, '', 1
from Quadrants q
where q.quadrantID not in (5)
order by quadrantID ASC

它将返回 6 行中的 5 行,就像它应该的那样。

4

2 回答 2

5

您是否知道NOT IN如果您的 CTE 在数据中返回 NULL 将返回不正确的结果。

尝试运行此查询并查看结果,您将获得零记录

select 1, 0, q.quadrantID, 0, '', 1 
from Quadrants q 
where q.quadrantID not in (NULL,5) 
order by quadrantID ASC

您应该在编写查询时NOT EXISTS阅读此内容以获取更多信息。

http://decipherinfosys.wordpress.com/2007/01/21/32/

编辑:我用子句写了你的查询NOT EXISTS,试试这个

select 1, 0, q.quadrantID, 0, '', 1 
from Quadrants q 
where NOT EXISTS
(
SELECT 1  from cte WHERE cte.quadrantID=q.quadrantID 
)
order by quadrantID ASC 
于 2012-09-07T16:42:35.503 回答
0
; WITH cte AS (
    ...
)

SELECT 1, 0, quadrantID, 0, '', 1
FROM 
  ( SELECT quadrantID
    FROM Quadrants q
  EXCEPT
    SELECT quadrantID
    FROM cte
  ) tmp 
ORDER BY quadrantID ASC ;
于 2012-09-07T17:17:26.083 回答