Pepi: Abfrage 2 Spalten, wenn in der einen vorhanden, dann in der zweiten nicht anzeigen

Ich habe zwei Tabellen in meiner Datenbank, das eine ist meine Userliste, das andere eine Symbolliste.

In der Symbolliste werden alle meine Symbole einer festen ID zugeordnet

id ! datei
-----------
1  ! 1.jpg
2  ! 2.jpg

In meiner User liste kann man jedem User ein bestimmtes Symbol aus der Symbolliste zuordnen.

id !user      ! id_symbol
-----------
1  ! Andreas  ! 2
2  ! Bernhard ! 1

Jedes Symbol darf nur einmal vergeben werden. Jetzt kommt mein Problem.

Wie kann ich mir nur die Symbole anzeigen lassen die noch nicht vergeben sind

SELECT a.id, a.datei FROM symbol a WHERE (nicht in Usertabelle vorhanden).

Aber ich muss gestehen ich weiß nicht in welche die Richtung meiner Abfrage gehen soll.

  1. Tach!

    Wie kann ich mir nur die Symbole anzeigen lassen die noch nicht vergeben sind

    SELECT a.id, a.datei FROM symbol a WHERE (nicht in Usertabelle vorhanden).

    Aber ich muss gestehen ich weiß nicht in welche die Richtung meiner Abfrage gehen soll.

    Correlated Subquery mit NOT EXISTS(). Reicht das schon als Stichwort, oder soll es ausführlicher sein?

    dedlfix.

    1. Hallo dedlfix,

      Correlated Subquery mit NOT EXISTS(). Reicht das schon als Stichwort, oder soll es ausführlicher sein?

      Ich wollte urpsrünglich schreiben „NOT EXISTS existiert.“, habs mir dann aber verkniffen. 😂

      Bis demnächst
      Matthias

      --
      Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    2. Ja

      
      SELECT a.id, a.datei FROM symbol a WHERE NOT EXISTS ( SELECT * FROM user WHERE id_symbol=a.id)
      

      aber was ich natürlich vorher nicht bedacht habe, es muss doch eine Ausname geben.

      Wie kann ich mir nur die Symbole anzeigen lassen die noch nicht vergeben sind, und das eine was dem User zugeordnet ist. Also praktisch

      SELECT a.id, a.datei FROM symbol a WHERE NOT EXISTS ( SELECT * FROM user WHERE id_symbol=a.id) UND id_symbol des users

      1. Tach!

        Wie kann ich mir nur die Symbole anzeigen lassen die noch nicht vergeben sind, und das eine was dem User zugeordnet ist. Also praktisch

        SELECT a.id, a.datei FROM symbol a WHERE NOT EXISTS ( SELECT * FROM user WHERE id_symbol=a.id) UND id_symbol des users

        Nicht UND, sondern OR a.id = (SELECT id_symbol FROM users WHERE die User-Id passt).

        dedlfix.

        1. Danke für die Hilfe ;-)

  2. select * from datei left join users on users.datei_id = datei.id where users.id is null