私はかなり長い(10テーブル、それぞれ約60kレコード)クエリを持っています。これらのテーブルはすべて、null値(すべて)を含む可能性があるため、左結合を使用して結合されます。
パフォーマンスが大幅に低下しているので、このコードまで追跡しました。
SELECT *
FROM MAIN_TABLE d
LEFT JOIN INSURANCES i on i.IMREDEM_CODE = d.IMREDEM_CODE
and i.INS_TERMINATIONDATE IS NULL
and INS_RANK = 0
and i.IMREINS_CODE = (SELECT TOP 1 IMREINS_CODE
from INSURANCES i2
WHERE i2.IMREDEM_CODE = i.IMREDEM_CODE
and i2.INS_TERMINATIONDATE IS NULL
and i2.INS_RANK = 0
ORDER BY TAG_SYSTEMDATE DESC)
基本的に、私がする必要があるのは、保険テーブルに0個以上のレコードが含まれる可能性があることです。これは、保険を更新すると、監査目的では更新ではなく挿入が実行されるためです。したがって、左側の結合でテーブルを2回結合する必要があります。さらに、一次保険と二次保険についてこのクエリを2回実行する必要があります(一次保険はランク= 0、二次保険はランク= 1です。IMREDEM_CODEはDテーブルのPKであり、iテーブルのFKです。
答えはここにあります:
left join INSURANCES i on i.IMREDEM_CODE = d.IMREDEM_CODE
and i.IMREINS_CODE = (SELECT max(imreins_code) FROM INSURANCES i2 WHERE i2.IMREDEM_CODE = i.IMREDEM_CODE and i2.INS_TERMINATIONDATE IS NULL and i2.INS_RANK = 0)