SQL Server AUSSER
-
03-07-2019 - |
Frage
Hier ist die Situation in der ich bin. Ich habe eine Tabelle der Menschen Informationen enthält. Einige von ihnen sind von einem anderen System importiert, während einige manuell importiert werden. Was würde Ich mag tun, ziehen alle in, aber wenn es einen Datensatz eingegeben haben, ist manuell und ein Datensatz, der importiert wurde, möchte ich nur die importierte einen auszuwählen (da es wahrscheinlich mehr auf dem neuesten Stand ist).
Hier ist, was ich bisher habe, aber es scheint nicht zu funktionieren (es nur gibt die manuell eingegebenen Datensätze):
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
Ich habe das Gefühl, das nicht wegen der innere Abfrage arbeitet auch in der instype Spalte ziehen, aber ich kann nicht, dass dies irgend bessere Möglichkeiten zu tun. Jede Beratung?
Lösung
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);
Andere Tipps
Sie könnten versuchen:
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
)