這是我的第一個問題,因此對任何禮儀錯誤表示歉意!如何使用SQL Oracle數據庫返回特定的父/子結果
我有三個相關的表...
ID - 該表列出了所有記錄
PARENT_CHILD_RELATIONSHIP可見ID - 此鏈接父記錄與他們的孩子記錄
信息 - 提供的所有記錄
的樣本數據
Table ID PARENT_CHILD_RELATIONSHIP DETAILS
Columns KEY|PROPER_ID PARENT_KEY|CHILD_KEY KEY|FIELD
1|P1 1|NULL 5|A
2|P2 2|5 5|C
3|P3 2|6 6|A
4|P4 3|7 6|D
5|C1 4|8 7|B
6|C2 4|9 7|C
7|C3 8|A
8|C4 8|C
9|C5 9|B
9|C
這裏是我的查詢的一個簡單的例子:
SELECT DISTINCT I.PROPER_ID, CHILD_ID_A.PROPER_ID, CHILD_ID_B.PROPER_ID
FROM ID I
LEFT OUTER JOIN PARENT_CHILD_RELATIONSHIP PCR_A ON PCR_A.PARENT_KEY = I.KEY
LEFT OUTER JOIN DETAILS D_A ON D_A.KEY = PCR_A.CHILD_KEY
AND D_A.FIELD = ('A')
LEFT OUTER JOIN ID CHILD_ID_A ON CHILD_ID_A.KEY = DETAILS_A.KEY
LEFT OUTER JOIN PARENT_CHILD_RELATIONSHIP PCR_B ON PCR_B.PARENT_KEY = I.KEY
LEFT OUTER JOIN DETAILS D_B ON D_B.KEY = PCR_B.CHILD_KEY
AND D_B.FIELD = ('B')
LEFT OUTER JOIN ID CHILD_ID_B ON CHILD_ID_B.KEY = DETAILS_B.KEY
WHERE I.PROPER_ID IN('1', '2', '3', '4')
我想要的是返回所有記錄中,其中(父)PROPER_ID或者是在第1列然後1,2,3,4,第2欄,我想回到孩子正確的記錄ID (如果該記錄在「詳細信息」表中有'A')。對於第3列,我想要做與第2列相同的操作,但在DETAILS表中有一個帶有'B'的子記錄。
有4分可能的情況,我可以看到:
1.有0子記錄與詳細信息表中的「A」或「B」 - 在這種情況下,我想返回一行只有家長Proper_ID並在隨後的2欄中空白。
2.在細節表中有一個或多個帶'A'的子記錄 - 在這種情況下,我想返回與子記錄一樣多的行。
3.如上所述,但在細節表中只有'B'。
4.有'A'和'B'子記錄 - 在這種情況下,如果每個記錄中有一個,我想在同一行上重新顯示所有數據。
電流輸出
I.PROPER_ID | CHILD_ID_A.PROPER_ID | CHILD_ID_B.PROPER_ID
P1 | NULL | NULL
P2 | C1 | NULL
P2 | C2 | NULL
P2 | NULL | NULL
P3 | NULL | C3
P3 | NULL | NULL
P4 | C4 | C5
P4 | C4 | NULL
P4 | NULL | C5
P4 | NULL | NULL
輸出我想:
I.PROPER_ID | CHILD_ID_A.PROPER_ID | CHILD_ID_B.PROPER_ID
P1 | NULL | NULL
P2 | C1 | NULL
P2 | C2 | NULL
P3 | NULL | C3
P4 | C4 | C5
這甚至可能嗎?我嘗試了許多不同的變體,並嘗試搜索其他示例,但尚未找到解決方案。
任何幫助將不勝感激!
包括一些示例數據和預期輸出你的問題將是有益的;以及當前查詢的問題。 –
謝謝@ alex-poole - 我已經添加了這些 - 希望不會太複雜 – AlexJ
ID.PROPER_ID與ID.KEY或其他東西一樣嗎?您發佈的查詢不會始終使用別名,這有點令人困惑。父母/子女關係只有一級 - 沒有孫子女? (不知道爲什麼你有一個單獨的父/子表,而不是ID中的父列) –