2

これを行うためのより良い方法があると感じていますが、それは頭に浮かびません。提案の後、私は馬鹿のように感じるだろうと思います. サブクエリの完全な外部結合が問題です。同じ外部キーを使用する 3 つの子テーブルを持つ親テーブルがあります。子テーブルの 1 つにデータがある場合、他の 2 つの子には同じ親 ID に関連するデータがあってはなりません。親のすべての行には、子テーブルの 1 つに 1 行のデータがあります。

データレイアウトの例、

親テーブル:

TRANSACTION
ID
1
2
3
4
5
6

子テーブル:

TRANSACTION_CH_A    TRANSACTION_CH_B    TRANSACTION_CH_C
T_ID_FK             T_ID_FK             T_ID_FK
1                   null                null
2                   null                null
null                3                   null
null                4                   null
null                null                5
null                null                6

これは私が思いついたクエリです:

SELECT * FROM TRANSACTION T
JOIN 
(
  SELECT 
  COALESCE (CH_A.T_ID_FK, CH_B.T_ID_FK, CH_C.T_ID_FK) AS T_ID
  FROM IPAC_OWN.TRANSACTION_CH_A CH_A
  FULL OUTER JOIN IPAC_OWN.TRANSACTION_CH_B CH_B ON CH_B.T_ID_FK = CH_A.T_ID_FK
  FULL OUTER JOIN IPAC_OWN.TRANSACTION_CH_C CH_C ON CH_C.T_ID_FK = CH_A.T_ID_FK
) 
CHILDREN ON CHILDREN.T_ID = T.ID



結果には、子テーブルのすべての行が含まれている必要があります。

前もって感謝します。

4

2 に答える 2

0

これはどう?

select
    *
from
    transaction t
    join IPAC_OWN.TRANSACTION_CH_A CH_A ON CH_A.T_ID_FK = T.ID
union
select
    *
from
    transaction t
    join IPAC_OWN.TRANSACTION_CH_B CH_B ON CH_B.T_ID_FK = T.ID
union
select
    *
from
    transaction t
    join IPAC_OWN.TRANSACTION_CH_C CH_C ON CH_C.T_ID_FK = T.ID
于 2013-11-12T21:08:14.893 に答える
0

UNION ALL のような非常に単純なものを作成できます

SELECT T_ID_FK  FROM  TRANSACTION_CH_A WHERE T_ID_FK  IS NOT NULL
UNION ALL 
SELECT  T_ID_FK   FROM TRANSACTION_CH_B WHERE T_ID_FK  IS NOT NULL
UNION ALL 
SELECT   T_ID_FK  FROM TRANSACTION_CH_C WHERE T_ID_FK  IS NOT NULL

結果セットに null が必要な場合は、すべての select ステートメントから where 句を削除するだけです。

于 2013-11-12T21:08:23.653 に答える