2012-02-29 7 views
2

少し複雑なクエリがあります。
私はテーブル親行を持つ子と子を持たない親行を選択する方法

tbl_Categories {CategoryID, Name, CategoryId_fk} 

を持っており、それは、自己参照テーブルをそれ。 CategoryId_fkNULLの場合、の値がある場合、その行はです。 私はすべての子供(それはCategoryId_fknullではない)と行をCategoryId_fknullであり、子を持たない行を選択する問題があります。 私が何かを試みたが、動作しません:あなたは、外部キーの両方baと一致した

SELECT a.* 
FROM tbl_Categories a 
WHERE NOT EXISTS (
    SELECT 1 FROM tbl_Categories b 
    WHERE b.CategoryId_fk= a.CategoryId_fk 
) 
+0

検索StackOverflow「再帰的CTE」は、このような問題を解決するための数多くの例を示しています。より具体的な例については、「階層」に入れてください。 –

+0

うーん..私はそれが正しいとは思わなかったと思う。あなたがすべての子供とすべての親を望むなら、それはテーブル全体ではないでしょうか? サンプルデータを提供できますか? –

+0

@BhrugeshPatel - 子どもがいる親なしのテーブル全体*。 –

答えて

2

私はあなたの質問を誤解しているかもしれませんが、ユーザーが特定の親のすべての子を見つけたいと思っていますが、質問の下で私が必要と考えるものが返されます。

/* All parents without children */ 
SELECT a.* 
FROM tbl_Categories a 
WHERE NOT EXISTS (
      SELECT * 
      FROM tbl_Categories b 
      WHERE b.CategoryId_fk = a.CategoryId 
) 
/* All children */ 
UNION ALL 
SELECT a.* 
FROM tbl_Categories a 
WHERE CategoryId_fk IS NOT NULL 
+0

ありがとう、間違ったフィールドを比較していた:/ – 1110