私はこのようなSQLを持っています:
SELECT distinct *
FROM LETTRE_VOIT_TEMP where NOT EXISTS
(
SELECT *
FROM LETTRE_VOIT_FINAL lv
where lv.NOID = LETTRE_VOIT_TEMP.NOID
AND lv.CODE_DEST = LETTRE_VOIT_TEMP.CODE_DEST
AND lv.CODE_CLIENT = LETTRE_VOIT_TEMP.CODE_CLIENT
AND (LETTRE_VOIT_TEMP.NO_ORDRE_CUMMUL IS NULL OR lv.NO_ORDRE_CUMMUL = LETTRE_VOIT_TEMP.NO_ORDRE_CUMMUL)
AND (LETTRE_VOIT_TEMP.DATE_CLOTURE IS NULL OR lv.DATE_CLOTURE = LETTRE_VOIT_TEMP.DATE_CLOTURE)
AND (LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL IS NULL OR lv.DATE_CLOTUR_REEL = LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL)
)
うまく機能しますが、問題は、テーブル LETTRE_VOIT_FINAL に多くのデータが含まれている場合、リクエストが遅くなることです。
だから私はこのように変更します:
SELECT distinct *
FROM LETTRE_VOIT_TEMP where NOT EXISTS
(
SELECT *
FROM LETTRE_VOIT_FINAL lv
where lv.NOID = LETTRE_VOIT_TEMP.NOID
AND lv.CODE_DEST = LETTRE_VOIT_TEMP.CODE_DEST
AND lv.CODE_CLIENT = LETTRE_VOIT_TEMP.CODE_CLIENT
AND (LETTRE_VOIT_TEMP.NO_ORDRE_CUMMUL IS NULL OR lv.NO_ORDRE_CUMMUL = LETTRE_VOIT_TEMP.NO_ORDRE_CUMMUL)
AND (LETTRE_VOIT_TEMP.DATE_CLOTURE IS NULL OR lv.DATE_CLOTURE = LETTRE_VOIT_TEMP.DATE_CLOTURE)
AND (LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL IS NULL OR lv.DATE_CLOTUR_REEL = LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL)
--AND lv.date_cloture between DATEADD(dd, -4, GETDATE()) and DATEADD(dd, +4, GETDATE())
AND lv.DATE_CLOTUR_REEL = @DATE_CLOTUR_REEL
)
期待どおりに動作しません。
最初にすべての LETTRE_VOIT_FINAL WHERE DATE_CLOTUR_REEL = @DATE_CLOTUR_REEL を選択してから、LETTRE_VOIT_TEMP と比較します。
どうやってやるの ?