2016-09-14 2 views
0

У меня есть вопрос и был бы признателен, если бы кто-нибудь мог помочь.Найти записи не в другой таблице

У меня есть две таблицы (REPL_SEND и Repl_Finish как имеющие 4 колонки

UID (varchar) 
reportID (varchar) 
reportIDVersion (varchar) 
replSendDTM (datetime) 

UID отличается в обеих таблицах (это первичный ключ для таблицы)

Они могут иметь повторяющееся значение в ReportId и reportIDVersion.

Я хочу reportID/reportIDVersion от REPL_SEND, так что такая комбинация reportID/reportIDVersion нет в Repl_Finish.

Что я пробовал:

SELECT * 
FROM REPL_SEND (nolock) 
WHERE reportID NOT IN (SELECT reportID FROM Repl_Finish) 

Это возвращает около 12 000 записей. Но когда я попытался

SELECT t1.reportID 
FROM REPL_SEND t1 (nolock) 
LEFT JOIN Repl_Finish t2 (nolock) ON t2.reportID = t1.reportID 

Я не получаю никаких значений (я имею в виду DB предпринимает очень долго, по-прежнему выполняется после того, как 15-й минуты)

Вопрос № 1: Это мой первый запрос правильно? [Основной вопрос]

Вопрос №2: Почему это занимает много времени со вторым запросом?

ответ

0

Вопрос 1:

SELECT * 
FROM REPL_SEND (nolock) WHERE UID NOT IN 
(SELECT rs.UID FROM 
    Repl_Finish as rf, REPL_SEND as rs 
    where rf.reportID = rs.reportID 
    and rf.reportIDVersion = rs.reportIDVersion 

) 

Вопрос 2: Может быть, вам нужно добавить индекс на ReportID и reportIDVersion столбцов в обеих таблицах

+0

мой apologies.UID отличается в обоих table.UID отличается первичный ключ таблицы – vic90

Смежные вопросы