4

親ではないすべての子を取得しようとしています。

テーブルはこんな感じ

ID  |  ParentID
---------------
1        NULL
2         1
3        NULL
4         2

最初に私が試した

SELECT *
FROM [SMD].[dbo].[ProposalFollowUp]
WHERE ID NOT IN (SELECT ParentID FROM [SMD].[dbo].[ProposalFollowUp])

しかし、それは行を返しません。parentID にないすべての行を選択したかったのです。なぜ機能しないのかわかりません。

それから私はこれを試しました

SELECT *
FROM [SMD].[dbo].[ProposalFollowUp] AS a
WHERE a.ID NOT IN 
(SELECT b.ID FROM [SMD].[dbo].[ProposalFollowUp] as b WHERE b.ParentID = a.ID)

しかし、これはすべての行を返します

私が欠けているものを誰でも教えてくれる

ありがとうございました!

4

6 に答える 6

1

なぜ機能しないのですか。

最初のクエリから行を取得していません:

SELECT *
FROM [SMD].[dbo].[ProposalFollowUp]
WHERE ID NOT IN (SELECT ParentID FROM [SMD].[dbo].[ProposalFollowUp])

述語になるためのそこのNULL値のため、何も返さないため、次を使用してこれを回避できます。ParentIDUNKNOWNNOT EXISTS

SELECT *
FROM [SMD].[dbo].[ProposalFollowUp]
WHERE NOT EXISTS (SELECT ParentID FROM [SMD].[dbo].[ProposalFollowUp])

sQL の他のすべての述語とは異なり、NOT EXISTS2 つの値のロジックTRUEFALSE動作し、値の確率は exists(ture) または false の 2 つしかないため、 を返す方法はありませんUNKNOWN

あなたのケースで探しているものを得られない別の回避策もありNULLますAND ParentID IS NOT NULL.

于 2012-09-26T13:08:01.373 に答える
1
SELECT *
FROM [SMD].[dbo].[ProposalFollowUp]
WHERE ID NOT IN (SELECT ParentID FROM [SMD].[dbo].[ProposalFollowUp] WHERE ParentID  IS NOT NULL)
于 2012-09-26T13:04:08.767 に答える
0

置換 = オン <>

SELECT *
FROM [SMD].[dbo].[ProposalFollowUp] AS a
WHERE a.ID NOT IN 
(SELECT b.ID FROM [SMD].[dbo].[ProposalFollowUp] as b WHERE b.ParentID <> a.ID)
于 2012-09-26T13:21:17.750 に答える
0

子 (親ではない) の ID のみが必要な場合は、次を使用することもできますEXCEPT

SELECT ID
FROM [SMD].[dbo].[ProposalFollowUp]

EXCEPT

SELECT ParentID
FROM [SMD].[dbo].[ProposalFollowUp] ;
于 2012-09-26T13:16:49.687 に答える