Postgresql
同一張表中的父子關係。選擇查詢僅獲取父記錄和記錄不屬於父子關係
我在同一張表中有一張帶有父子關係的表。一些樣本數據
id │ name │ parent │ is_active ════╪══════════════════════╪════════╪═══════════ 1 │ Company A │ null │ true 2 │ Child of A │ 1 │ true 3 │ 2Child of A │ 1 │ true 4 │ 3Child of A │ 1 │ true 5 │ 0 Single Company │ null │ true 6 │ 1 Single Company │ null │ true 7 │ 2 Single Company │ null │ true 8 │ Parent Company B │ null │ true 9 │ 0 Child Company of B │ 8 │ true 10 │ 1 Child Company of B │ 8 │ true 11 │ 2 Child Company of B │ 8 │ true 12 │ 3 Child Company of B │ 8 │ true
我想寫兩個查詢
- 獲取所有父記錄(僅父記錄) 範例:id 1,8
- 獲取所有單條記錄(僅記錄不屬於父子) 範例:5,6,7
請幫助編寫選擇查詢。
SELECT t1.* FROM "table" t1 WHERE t1.parent IS NULL AND /* NOT */ EXISTS (SELECT 1 FROM "table" t2 WHERE t1.id = t2.parent)
EXISTS - 用於父記錄。
NOT EXISTS - 用於單個記錄。
如果可能的話,您能否詳細說明您的問題,同時編寫您的 Select 查詢以便更好地理解。
正如您所說的“同一張表中的父子關係”,您的意思是將所有父值都返回為不同的值嗎?
然後,
- 獲取所有父記錄(僅父記錄) 範例:id 1,8
SELECT DISTINCT parent FROM "table_name" t1 WHERE parent IS NOT NULL;
- 獲取所有單條記錄(僅記錄不屬於父子) 範例:5,6,7
SELECT DISTINCT id FROM "table_name" t1 WHERE t1.id= t1.parent IS NULL;