2011-06-18 6 views
0

私は列を持つテーブル「項目を」持っている::のMySQLクエリ(合流)

|id(primary_key)|parent_id|name| 

私は子供を持っていないすべてのアイテムを取得する必要があります。

答えて

1
SELECT * FROM item WHERE id NOT IN (SELECT parent_id FROM item) 

このようなクエリを書くには、他の方法があります。しかし、これはあなたを開始する必要があります。

parent_id列にはないidのレコードをすべて選択します。つまり、このレコードには子がありません。

+0

結合を使用して解決策を教えてください。 – bob

+1

確かです。これらの要件をオリジナルの投稿に指定することをお勧めします。 –

+0

これは、不要な一時テーブルを作成します。 –

2
SELECT [some cols] 
    FROM item i 
     LEFT JOIN item children ON children.parent_id = i.id 
WHERE children.id IS NULL; 
+0

正解です。 parent_idが索引付けされていると効率的です。 –

+0

あなたは 'JOIN'条件と' WHERE'節のまわりで何か教育を提供できますか? –

+0

@Jason、確か:これは自己排除結合と呼ばれる手法です。結果セットにさらに多くの情報を追加して、不要なものを最終的な結果セットから削除します。除外結合の良い説明は次のとおりです。http://www.xaprb.com/blog/2005/09/23/how-to-write-a-sql-exclusion-join/そして、 http://adam-bernier.appspot.com/post/38001/the-self-exclusion-join – bernie