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?

War es hilfreich?

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
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top