Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Sagt es, ich habe keine Zeile ausgewählt?

Dafür gibt es mehrere Möglichkeiten:

Sie können einen Anti-Join verwenden, wie zum Beispiel:

SELECT m.MEMBERID,
       m.LASTNAME,
       m.FIRSTNAME
  FROM MEMBERS m
  WHERE m.MEMBERID NOT IN (SELECT DISTINCT MEMBERID
                             FROM CURRENTLOAN
                           UNION ALL
                           SELECT DISTINCT MEMBERID
                             FROM HISTORY);

Eine andere Möglichkeit (und meine bevorzugte Methode), das zu tun, was Sie wollen, ist:

SELECT DISTINCT m.MEMBERID,
                m.LASTNAME,
                m.FIRSTNAME
  FROM MEMBERS m
  LEFT OUTER JOIN (SELECT DISTINCT MEMBERID
                     FROM (SELECT MEMBERID
                             FROM CURRENTLOAN
                           UNION ALL
                           SELECT MEMBERID
                             FROM HISTORY)) u
    ON u.MEMBERID = m.MEMBERID
  WHERE u.MEMBERID IS NULL;

Angesichts der von Ihnen angezeigten Daten sollten diese Abfrage sowie Ihre ursprüngliche Abfrage jedoch null Zeilen zurückgeben. SQLFiddle hier

Beachten Sie, dass, wenn Sie die aktuelle Ausleihe an Mitglied 004 auskommentieren, "Joe Brown" SQLFiddle zurückgegeben wird hier

Viel Glück.