いくつかの問題を引き起こす次のクエリがあります:TLSN_TRD_IDがTLEAテーブルに明確にあるにもかかわらず、ORA-00904: "TLEA"."TLSN_TRD_ID": invalid identifier
が表示されます。これは、エイリアシングが正しく機能しないかのようです。 RECONテーブルとTLEAテーブルは別々に機能しますが、以下のように左結合を行おうとすると、エラーが発生します。問題となる可能性のある提案はありますか?
SELECT * FROM
(
SELECT * FROM DF_RISK_SIT2_owner.RECON_RESULTS
WHERE (RS_ONLY = 1 or VERSION_MISMATCH = 1) AND REC_SYSTEM = 'SUMMIT'
)RECON
LEFT JOIN
(
SELECT * FROM DF_RISK_CUAT_owner.TLEA
INNER JOIN
(SELECT TLSN_TRD_ID,TLSN_LEG_ID, MAX(TLEA_COB_DT) AS MDate
FROM DF_RISK_CUAT_owner.TLEA
GROUP BY TLSN_TRD_ID,TLSN_LEG_ID
)MaxDate
ON MaxDate.TLSN_TRD_ID = DF_RISK_CUAT_owner.TLEA.TLSN_TRD_ID
AND MaxDate.MDate = DF_RISK_CUAT_owner.TLEA.TLEA_COB_DT
AND MaxDate.TLSN_TRD_ID='C8112832LX'
)TLEA
ON RECON.RS_TRD_ID = TLEA.TLSN_TRD_ID
更新:問題は重複する列名に関連しているようです:LEFT JOIN
の下の行をSELECT MaxDate.TLSN_TRD_ID AS "A_A_TLSN_TRD_ID"
で置き換えてから、TLSA.A_A_TLSN_TRD_ID
で結合すると機能します。不思議なことに、私がTLEA.MaxDate.TLSN_TRD_ID
に参加すると機能しません。なぜか?
これは、SELECT *を使用し、テーブルをそれ自体に結合しているためです。 DBエンジンはすべての列を返そうとするため、同じ名前の列が複数ある場合は、どの列を参照しているかを知る必要があります。両方が必要な場合は、それらをエイリアスで指定して、出力する順序を指定する必要があります。
集計が機能する理由は、重複する列を返そうとしないためです。 SELECT *を必要な列に置き換え、エイリアスを使用して、必要な列を指定します。
一般的なベストプラクティスとして、SELECT *を使用しないでください。常に列名を指定してください。