2016-04-26 19 views
1

私はデータを抽出する必要がある単一のテーブルを持っています。表は次のようになります。同じテーブルを比較して結果を無視する

ID  CO_ID  Company 
123456    ABC Company 
5847  123456  Jim Bob Company 
524863    John Smith Company 
8975     Suzie Q United 
77458  524863  Ha Ha Limited 

私は私に別の会社に縛られていないか、会社がそれらに縛られているすべての企業を与えるためにテーブルを照会する必要があります。したがって、すべての会社はIDを持っていますが、CO_IDを持っている会社はほとんどありません。それは、別の会社に縛られている場合のみです。私は自分自身と結びついていない会社だけを引っ張りたい。これらのレコードはすべて同じテーブルに存在します。私はどのように比較を行うのか分かりませんので、私が探している結果が得られます。

編集:この例では、8975のみが返されます。実際の生活では、この表には3500レコードがあります。

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

ジェイソン

+2

上記のデータセットから、 '8975 Suzie Q'Unalのみが返されるべきですか? –

+0

あなたの質問を編集し、あなたが与えたデータの回答を提供してください。 –

+0

投稿が編集されました。この例では、返されるレコードは1つだけです。現実には、このテーブルには3500レコードがあり、いくつかの返されたレコードが必要です。 – Jayson

答えて

2

は、私はあなたがCO_IDがnullで、IDが別の行によって参照されていないすべての行をしたいと思います。

SELECT * 
FROM table 
WHERE ID NOT IN (SELECT CO_ID FROM table WHERE CO_ID IS NOT NULL) 
    AND CO_ID IS NULL 
+0

これが書かれています。 – FallAndLearn

+0

私はこれが特にOPが望ましくないものだと確信しています。これにより、行がまったく返されません。 –

+0

ええ、これは全く行を返しません。 – Jayson

2

はおそらく、あなたはこれをしたい:NOT INNOT EXISTS

SELECT * 
FROM table t 
WHERE NOT EXISTS (SELECT 1 FROM table t2 WHERE t2.CO_ID = t.ID) AND 
     CO_ID IS NULL; 

注意味が微妙に異なっています。 CO_IDNULLの値を取るため、 "同等の" NOT INクエリは行を返しません。

+0

CO_IDがnullであっても、 。 CO_IDは、レコードBがレコードA(CO_IDが指し示すID)に関連付けられていることを示すための結束に過ぎません。私は彼らにCO_IDを持っていないすべてのレコードAが必要ですが、レコードAのIDが他のレコードによって参照されていない場所も必要です。 – Jayson

+0

これは、行を一切返しません。 – Jayson

+0

@Jayson。 。 。サブクエリのタイプミスです –

0

空白のエントリが 'ある場合

SELECT id, company FROM table 
WHERE id NOT IN (SELECT co_id FROM table WHERE co_id IS NOT NULL) 
AND co_id IS NULL; 

を試してみてください'(単一のスペース)、これは

SELECT id, company FROM table 
WHERE id NOT IN (SELECT co_id FROM table WHERE co_id != ' ') 
AND co_id = ' '; 

になり、彼らがある場合は ''(空文字列)は、使用することを

+0

は行を返しません – Jayson

+0

'col_id'カラムの空白のエントリはNULLか空白(空文字列か空白)ですか?それに応じて上記の "IS NOT NULL"を変更してください - あなたが提供した例で動作します。 – mpez0

+0

入手しました。 Nullsではなく、私の元の要求にそれを含めないと申し訳ありません。 – Jayson

関連する問題