私はCAL、SOURCE、HISTORYという3つのテーブルを持っています。私が使用しOracle - 複数のテーブルの左外部結合が目的のヌル値を返さない
CAL TABLE CAL_DATE 01/05/16 02/05/16 03/05/16 04/05/16 05/05/16 06/05/16 07/05/16
SOURCE TABLE TABLE_ID GROUP 1210 Sales 1211 Reference 1230 Marketing 1245 Sales 1650 Reference 1784 Sales
HISTORY
RUN_DATE TABLE_ID STATUS 01/05/16 1210 COMPLETED 02/05/16 1210 COMPLETED 02/05/16 1211 COMPLETED 03/05/16 1211 COMPLETED 01/05/16 1230 COMPLETED 03/05/16 1230 COMPLETED
クエリ。
SELECT TO_CHAR(C.CAL_DATE,'mm/dd/yyyy') AS CAL_DATE,TO_CHAR(C.CAL_DATE,'day') AS WDAY,X.* FROM CAL C LEFT OUTER JOIN
(
SELECT S.GROUP,S.TABLE_ID,H.RUN_DATE,H.STATUS FROM TABLE S
LEFT JOIN HISTORY H
ON S.TABLE_ID=H.TABLE_ID
WHERE 1=1
AND STATUS='COMPLETED'
) X
ON TO_CHAR(C.CAL_DATE,'dd/mm/yyyy')=TO_CHAR(RUN_DATE,'dd/mm/yyyy')
AND X.TABLE_ID IN (1210,1211,1230)
WHERE TO_CHAR(C.CAL_DATE,'mm/dd/yyyy') <= TO_CHAR('03/05/2016','mm/dd/yyyy')
ORDER BY SOURCE_TABLE_ID ASC
期待される出力は以下に示されていますが、出力が異なります。 1つ以上のテーブルIDを渡すと、NULLがフィルタリングされます。クエリを修正するのを手伝ってください。
あなたはLEFTの作品を登録しようどのようにより良い理解を得るために必要
CAL_DATE TABLEID Status 01/05/16 1210 Completed 02/05/16 1210 Completed 03/05/16 null null 01/05/16 null null 02/05/16 1211 Completed 03/05/16 1211 Completed 01/05/16 1230 Completed 02/05/16 null null 03/05/16 1230 Completed
この条件で 'SOURCE_TABLE_ID'カラムを参照するため、このクエリはコンパイルも実行もできません:' X.SOURCE_TABLE_ID IN(1210,1211,1230) '、' X'という名前のサブクエリにはそのようなカラムは含まれていません選択リストの中で: 'SELECT S.GROUP、S.TABLE_ID、H.RUN_DATE、H.STATUS FROM ... ' – krokodilko
それは私の悪いです。列名はTABLE_IDのみです。私はSOURCE_TABLE_IDを間違って配置しました。 –
実行可能なクエリは次のとおりです。 TODCHAR(C.CAL_DATE、 'mm/dd/yyyy')AS CAL_DATE、TO_CHAR(C.CAL_DATE、 '日')AS WDAY、X。* CAL C左外部継ぎ手 ( SELECT S.GROUP、S。表S S.TABLE_ID = H.TABLE_ID の履歴H をJOIN左からTABLE_ID、H.RUN_DATE、H.STATUS WHERE 1 = 1 AND STATUS = 'COMPLETED' )X ON TO_CHAR(C.CAL_DATE、」 TO_CHAR(C.CAL_DATE、 'mm/dd/yyyy') dd/mm/yyyy ')> TO_CHAR(CAL_DATE、' dd/mm/yyyy ')= TO_CHAR(RUN_DATE、' dd/mm/yyyy ') AND X.TABLE_ID IN 1210,1211,1230 = TO_CHAR('03/05/2016 '、' mm/dd/yyyy ') ORDER BY TABLE_ID、CAL_DATE ASC –