0
у меня есть SQL, как это:каскадных 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.
как я могу это сделать?