我有一个这样的 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 进行比较。
我怎样才能做到这一点 ?