Left Join: Rechte Tabelle hat Daten?



  • Hallo Forum,

    ich möchte den Inhalt von Tabelle A anzeigen. Zusätzlich soll in einer Spalte angezeigt werden ob in Tabelle B Einträge zu A vorhanden sind. Das würde man mit einem Left Join machen. Datenbank MS SQL 2012

    Select A.*, B.Key FROM A LEFT JOIN B ...

    Im Moment steht in der Spalte B.Key null oder der Key. Dort soll jedoch Ja oder Nein angezeigt werden, je nachdem ob in Tabelle B Daten sind oder nicht. Kann ich in der Spaltenliste zw SELECT und WHERE keine Auswertungen machen? zB.
    Select A.*, (B.Key IS NOT NULL) FROM A LEFT JOIN B ...

    Alternativ:
    Select A.*, COUNT(B.Key) FROM A LEFT JOIN B ... GROUP BY ...

    Hier ist jedoch das Problem das in der Group By Klausel alle Spalten von Tabelle A aufgelistet werden müssen und diese sind vom Typ ntext. Fehlermeldung:

    Die Datentypen 'text', 'ntext' und 'image' können nur mithilfe des Operators IS NULL oder LIKE verglichen oder sortiert werden.

    Habt ihr einen schnellen Tip?

    Vielen Dank

    Peter



  • Argh, man kann SQL auch schachteln. Also:

    Select A.,
    (SELECT COUNT(
    ) FROM B WHERE...)
    FROM A WHERE ...

    Jetzt steht da 0 oder 1, je nachdem ob da Zeilen gefunden wurde. Kann ich das irgendwie in Ja/Nein umbauen?



  • Hilft dir CASE bzw. COALESCE weiter?



  • Case hat mir weitergeholfen. Vielen Dank 🙂

    SELECT A.*, 'Ist in B' =
          CASE (SELECT count(*) FROM B WHERE...)
             WHEN '0' THEN 'nicht vorhanden'
             WHEN '1' THEN 'vorhanden'
             ELSE 'Problem'
          END
    FROM A
    

Log in to reply