Выполняя то, что я считал довольно обычной задачей для поиска записей в одной таблице, которых нет в другой таблице, я начал работать следующим образом. Примечание: общее значение имеет тип float в одной таблице (таким образом, литой) и varchar (20) в другой. MEMID = float, DMID = varchar.SQL - записи не в другой таблице
select cast((convert(int, MEMID)) as varchar(20))
from tempProv111315
where cast((convert(int, MEMID)) as varchar(20)) NOT IN (
SELECT DMID
FROM tempMemberMaster121015
)
Приведенные выше данные не содержат записей (хотя я знал, что некоторые из них существуют). Поэтому я попробовал следующее (что сработало).
select cast((convert(int, pv.MEMID)) as varchar(20))
from tempProv111315 pv
left outer join tempMemberMaster121015 mm on
cast((convert(int, pv.MEMID)) as varchar(20)) = mm.dmid
where mm.dmid is null
Хотя, вероятно, простая причина, для жизни меня не видно, почему первый способ не сработал. Я не дБА, но часто использовал оба способа в разных обстоятельствах, поэтому я действительно хочу понять, чего не хватает. Может ли кто-нибудь объяснить разные результаты, поскольку они кажется логически равным мне.
ps - Я знаком с несколькими способами отбрасывания поплавка. Это мой типичный метод. Я не думаю, что это проблема ... но если да, то почему это работает хорошо во втором заявлении?
Спасибо!
Возможно полезное чтение: [NOT IN vs. NOT EXISTS vs. LEFT JOIN/IS NULL: SQL Server] (http://explainextended.com/2009/09/15/not-in-vs-not-exists- vs-left-join-is-null-sql-server /) – AHiggins