で特定の親/子結果を返す方法これは私の最初の質問ですので、エチケットのエラーのためにお詫び申し上げます!私は3つの関連するテーブルを持っているSQL Oracleデータベース
...
IDは - これは自分の子レコード
DETAILSと親レコードをリンク - - このテーブルには、すべてのレコード
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
は私のクエリの単純化した例です。
(親)PROPER_IDが列2に、次いで、カラム1のいずれかである1,2,3,4-どこのすべてのレコードを返すことです、私は子レコードの適切なIDを返すようにしたい私は何をしたい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')
そのレコードの詳細テーブルに「A」が含まれている場合列3については、列2と同じようにしたいが、DETAILS表に「B」を持つ子レコードがある場合。
私が見ることができる4つの可能なシナリオがあります。
1.Thereは、詳細テーブル「A」または「B」と0子レコードです - このケースでは、私はちょうど親Proper_IDを持つ単一の行を返すようにしたいです次の2つの列に空白があります。
2.詳細テーブルに「A」を含む子レコードが1つ以上あります。この場合、子レコードがある行数だけ戻したいと考えています。
3.上記と同じですが、詳細テーブルに「B」のみがあります。
4.「A」と「B」の両方の子レコードがあります。この場合、それぞれが1つの場合は、同じ行のすべてのデータを再実行します。
電流出力
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
がこのさえ可能ですか?私は多くの異なるバリエーションを試してみて、他の例を探してみましたが、解決策を見つけられませんでした。
ご協力いただければ幸いです!
あなたの質問にいくつかのサンプルデータと期待される出力を含めると便利です。現在のクエリで問題がどのようなものであるかを示します。 –
ありがとう@アレックスポール - 私はそれらを追加しました - うまくいけばあまり複雑ではない – AlexJ
ID.PROPER_IDはID.KEYと同じですか?あなたが投稿したクエリは、エイリアスを一貫して使用していません。少し混乱します。親子関係のレベルは1つしかない - 孫はいない? (IDの親カラムではなく、親/子テーブルの別のテーブルがある理由はわかりません) –