1つの支払いに複数の割り当てがあるため、最初の一致(rownum = 1の場合)のみを考慮する必要があるため、サブクエリを結合に追加する必要があります。ジョインのサブクエリは、where句の外部クエリのテーブルを使用する必要がありますか?
しかし、外部クエリからpmtを割り振り結合のサブクエリに追加するのが最適かどうかはわかりません。
パフォーマンスヒットなどの場合は、これを別の方法で行う必要がありますか?
SELECT
pmt.payment_uid,
alt.allotment_uid,
FROM
payment pmt
/* HERE: is the reference to pmt.pay_key and pmt.client_id
incorrect in the below subquery? */
INNER JOIN allotment alc ON alt.allotment_uid = (
SELECT
allotment_uid
FROM
allotment
WHERE
pay_key = pmt.pay_key
AND
pay_code = 'xyz'
AND
deleted = 'N'
AND
client_id = pmt.client_id
AND
ROWNUM = 1
)
WHERE
AND
pmt.deleted = 'N'
AND
pmt.date_paid >= TO_DATE('2017-07-01')
AND
pmt.date_paid < TO_DATE('2017-10-01') + 1;
それが正しいかどうかは、実行時にどうなるかによって異なります。 –
私は大きなデータを処理しており、クエリは非常に遅いです。私はこれがパフォーマンスの低下に寄与しているのではないかと疑問に思っています。可能であれば避けなければならないものならば... – NoobSter
そのサブクエリの相関関係は、おそらく遅い原因となり、rownumに依存して "あなたがデータにいくつかの意図的な命令を課す場合を除きます。たとえば、割当テーブルに日付またはタイムスタンプの列がありますか? 「作成日」? (もしそうなら、その列の名前は何ですか?) –