Я сравниваю два запроса, используя EXISTS и IN. Они оба дают разные результаты. Когда я использую запрос с использованием IN, результат является правильным, но при использовании запроса EXISTS я получаю несколько записей, должна была быть только 1 запись.
Тест производительности: IN Query - 17 секунд, чтобы получить результат EXISTS Query - 9-11 секунд, чтобы получить результат
Ожидаемый результат: 1 - запись
IN-запрос (1 запись):
SELECT CINO, CLIENTID, COID, ADDRVER, ASSETFIX, AVEMONSALE, BRCHAFFL, BUS
DESC, BUSTYPE, CAPITAL, CONTACT, FACCOND, FIXASSET, FIXTURE, INFADDR,
INFORMANT, INVENTORY, LANDLORD, LASTYRSALE, LIABILITY, LINEPRDSRV,
LOTAREA, MACHINE, MAJBAN, MAKE, MOTOR, NATINC, NUMEMPLOY, OBSERVE,
OBSERVE2, OBTINFORM, OFFCAREA, OFFCBLDG, OFFCLOC, OFFCVALUE, OFFORG,
OTHERINC, POSITION, RECEIVABLE, REGWITH, REMARKS, REMNEG, REMPOS, RENTEXP,
YRSOPER, YRINCOME, DATEORG, SUPPLIER
FROM LCBINV
WHERE CINO IN (
SELECT CINO FROM LCMINV WHERE AUDITKY IN (
SELECT AUDITKY
FROM LSAUDIT
WHERE ENTRYDT > '03-Nov-2019' AND ENTRYTM > '07:15:10'
)
)
Существующий запрос (200 записей):
SELECT CINO, CLIENTID, COID, ADDRVER, ASSETFIX, AVEMONSALE, BRCHAFFL, BUS
DESC, BUSTYPE, CAPITAL, CONTACT, FACCOND, FIXASSET, FIXTURE, INFADDR,
INFORMANT, INVENTORY, LANDLORD, LASTYRSALE, LIABILITY, LINEPRDSRV,
LOTAREA, MACHINE, MAJBAN, MAKE, MOTOR, NATINC, NUMEMPLOY, OBSERVE,
OBSERVE2, OBTINFORM, OFFCAREA, OFFCBLDG, OFFCLOC, OFFCVALUE, OFFORG,
OTHERINC, POSITION, RECEIVABLE, REGWITH, REMARKS, REMNEG, REMPOS,
RENTEXP, YRSOPER, YRINCOME, DATEORG, SUPPLIER
FROM LCBINV
WHERE CINO IN (
SELECT CINO FROM LCMINV WHERE EXISTS (
SELECT AUDITKY FROM LSAUDIT
WHERE ENTRYDT > '03-Nov-2019' AND ENTRYTM > '07:15:10'
)
)
Итак, вотфункция моего запроса, он в основном проверяет наличие обновлений в информации об индивидууме, если ENTRYDT и ENTRYTM больше, чем дата и время последней проверки.
Моя проблема заключается в том, почему я получаю несколько записей по запросу EXISTS, даже если ENTRYDTне больше этой даты?