2012-02-29 76 views
2

我有一點點複雜的查詢。
我有表如何選擇父行沒有父子行的子行

tbl_Categories {CategoryID, Name, CategoryId_fk} 

而且它自我引用的表。 當CategoryId_fkNULL那麼該行是當有一個值,它是一個。 我有問題要選擇所有的孩子(這是CategoryId_fk不是null)和行CategoryId_fknull並沒有孩子。 我試過的東西,但不工作:

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」爲幾十例如何解決這樣的問題的例子。爲了更具體的例子,在「層次結構」中折騰。 – 2012-02-29 15:17:32

+0

嗯..我想我沒有把它做對。如果你想要所有的孩子和所有的父母,不會是整桌子嗎? 你能提供樣本數據嗎? – 2012-02-29 15:27:02

+0

@BhrugeshPatel - 整個桌子*沒有*父母*有*孩子。 – 2012-02-29 15:34:59

回答

2

你匹配的外鍵都ba

我可能會誤解你的問題,大多數時候用戶想找到給定父母的所有孩子,但在查詢下方返回我認爲你需要的東西。

/* 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 2012-02-29 15:30:37