SQL Server ИСКЛЮЧИТЬ
-
03-07-2019 - |
Вопрос
Вот ситуация, в которой я нахожусь. У меня есть таблица с информацией о людях. Некоторые из них импортируются из другой системы, а некоторые импортируются вручную. Я хотел бы привлечь всех, но если есть запись, введенная вручную, и запись, которая была импортирована, я хочу выбрать только импортированную (поскольку она, вероятно, более актуальна).
Вот что у меня пока есть, но, похоже, это не работает (он возвращает только введенные вручную записи):
SELECT --fields go here
FROM
(
SELECT PERSON_UID, instype
FROM AdmitsInterfaceTable
WHERE instype='M' --Manually entered people
EXCEPT
SELECT PERSON_UID, instype
FROM AdmitsInterfaceTable
WHERE instype='I' --Imported people
) P,
AdmitsInterfaceTable A
WHERE
P.PERSON_UID=A.PERSON_UID
AND P.instype=A.instype
У меня такое ощущение, что это не работает из-за того, что внутренний запрос также вытягивает столбец instype, но я не могу придумать лучшего способа сделать это. Любой совет?
Решение
SELECT PERSON_UID, instype
FROM AdmitsInterfaceTable a
WHERE instype='I' --get all imported people
union -- plus all manuals who are not also imported
SELECT PERSON_UID, instype
FROM AdmitsInterfaceTable a
WHERE instype='M' --Imported people
and not exists ( -- without imported matches
select * from FROM AdmitsInterfaceTable b
WHERE instype='I' and b.person_uid = a.person_uid);
Другие советы
вы можете попробовать:
SELECT CASE WHEN b.person_UID is null THEN a.person_UID ELSE person_UID END,
CASE WHEN b.person_UID is null THEN a.instype ELSE instype END
--and so forth through all the columns you want
FROM
(SELECT PERSON_UID, instype -- add list of additional fields you need here
from AdmitsInterfaceTable WHERE instype='M' ) A
LEFT JOIN
(SELECT PERSON_UID, instype -- add list of additional fields you need here
from AdmitsInterfaceTable WHERE instype='I' ) B on A.PERSON_UID = B.PERSON_UID
SELECT --fields go here
FROM AdmitsInterfaceTable A
WHERE
P.PERSON_UID=A.PERSON_UID
AND P.instype=A.instype
AND instype='M' --Manually entered people
AND person_uid not in (
SELECT PERSON_UID FROM AdmitsInterfaceTable
WHERE instype='I' --Imported people
)
Не связан с StackOverflow