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 INCTEがデータで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 に答える