Thomas: Prüfen einer Liste von Werten auf vorhanden oder nicht

Hallo,

ich komme grad nicht weiter und hoffe jemand kann mir die Augen öffen.

Ich habe eine Liste von Werten: 1,2,3,4,5,6,...
Und ich habe eine Tabelle mit dem Namen "daten" das u.a. das Feld "wert" enthält.

Ich möchte jetzt durch eine Abfrage wissen welche Werte aus meiner Liste in der Tabelle vorhanden sind und welche nicht.

zb.
1 -> ja
2 -> ja
3 -> nein
usw..

Hier meine Versuche:

  
select wert  
from daten  
where wert not in (1,2,3,4,5,6)  

Das würde mir nun alle Werte aus "daten" zurückgeben, die nicht in der Liste vorhanden sind.
Aber ich will ja wissen was aus der Liste in der Tabelle nicht vorhanden ist.
Außerdem weis ich dadurch immernoch nicht was aus der Liste in der Tabelle vorhanden ist.

  
select wert  
from daten  
left join daten d  
on d.wert in (1,2,3,4,5,6)  

Dadurch könnte ich zumindest mal sehen welche vorhanden sind, und welche nicht.
Aber ich sehe als nicht vorhanden auch alle Werte aus der Tabelle "daten". Mich interessiert der Status ja nur für die Werte aus der Liste und nicht für alle Einträge in der Tabelle.

Wie stelle ich das an? Komme einfach auf keinen grünen Zweig.

Danke euch.

Grüße
Thomas

  1. Tach!

    Ich möchte jetzt durch eine Abfrage wissen welche Werte aus meiner Liste in der Tabelle vorhanden sind und welche nicht.

    select wert
    from daten
    left join daten d
    on d.wert in (1,2,3,4,5,6)

    
    > Dadurch könnte ich zumindest mal sehen welche vorhanden sind, und welche nicht.  
      
    Jein, diese Abfrage liefert nur die vorhandene Menge. Für den Satzteil nach dem Komma musst du erst noch die Differenz zur Ausgangsliste ermitteln.  
      
    Wenn du die Ausgangsliste in einem Array vorliegen hast (am besten mit den Werten als Key und einem Dummy als Wert), kannst du nun durch die Ergebnismenge laufen und jeden enthaltenen Wert aus dem Array löschen, zum Beispiel mit unset($a[$wert]);  
      
      
    dedlfix.
    
    1. Jein, diese Abfrage liefert nur die vorhandene Menge. Für den Satzteil nach dem Komma musst du erst noch die Differenz zur Ausgangsliste ermitteln.

      Ja richtig, stimmt. Wird ja nur das durchgekaut was in der Tabelle gefunden wird.

      Wenn du die Ausgangsliste in einem Array vorliegen hast (am besten mit den Werten als Key und einem Dummy als Wert), kannst du nun durch die Ergebnismenge laufen und jeden enthaltenen Wert aus dem Array löschen, zum Beispiel mit unset($a[$wert]);

      Nun, es wäre keine Problem das in ein Array zu packen. Ich wüsste auch wie ich das dann anzugehen habe. Allerdings wollte ich die Aufgabe rein mit einer SQL Abfrage lösen, wenn das überhaupt machbar ist?

      dedlfix.

      Danke.

      Grüße
      Thomas

      1. Tach!

        Allerdings wollte ich die Aufgabe rein mit einer SQL Abfrage lösen, wenn das überhaupt machbar ist?

        In der Form der kommaseparierten Liste wohl eher nicht. Du könntest die Liste als (temporäre) Tabelle anlegen, dann kannst du die eigentlichen Daten mit einem Left-Join daran anbinden und über NULL im rechten Teil feststellen, was fehlt.

        dedlfix.

        1. Hi,

          Du könntest die Liste als (temporäre) Tabelle anlegen, dann kannst du die eigentlichen Daten mit einem Left-Join daran anbinden und über NULL im rechten Teil feststellen, was fehlt.

          ich habe das jetzt schnell mit nem kleinen PHP Script incl. Array erledigt.
          Ich habe zwar kurzzeitig mit dem Gedanken an eine temporäre Tabelle gespielt, fand das dann aber doch zu übertrieben.

          dedlfix.

          Danke.

          Grüße
          Thomas