JOIN mit NULL-Werten und WHERE-Bed.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JOIN mit NULL-Werten und WHERE-Bed.

    Hi, ich bin grad auf ein problem gestoßen und komme nicht weiter :-(

    Also 3 Tabellen:

    Gerätetyp (gt_id, ...)
    Geräte (g_id, gt_id, ... )
    Wekstatt_hat_Geräte (raum_nr, g_id , g_anz)

    Ich will ALLE verfügbaren geräte aubrufen und, wenn in der Werkstatt vorhanden, die vorhandene anzahl der geräte, ansonsten NULL.

    mein ansatz:
    Code:
    SELECT * FROM geraete
      RIGHT JOIN geraetetyp USING (gt_id)
      LEFT  JOIN werkstatt_hat_geraete USING (g_id)
      WHERE werkstatt_hat_geraete.raum_nr = '$_GET[raum_nr]'
    wie ich schon erwahret habe gibt er mir hier jetzt nur die geräte an, die in diesem Raum bereits vorhanden sind.

    Weiß jemand rat ?

  • #2
    rat:
    Code:
    SELECT * FROM geraete
      RIGHT JOIN geraetetyp USING (gt_id)
      LEFT  JOIN werkstatt_hat_geraete  
      ON   geraete.g_id=werkstatt_hat_geraete.g_id
          AND werkstatt_hat_geraete.raum_nr = '$_GET[raum_nr]'
    explain:
    Mit der bisherigen WHERE clause eliminierst Du fälschlich alle Zeilen, wo die
    raumnummer nicht stimmt, darunter auch die NULL raum_nr.
    Sobald die Bedingung in der ON-Bedingung ist, ist eine NULL-Zeile garantiert.
    ON und USING schliessen sich aus (theorie lt manual).

    Kommentar


    • #3
      variante:
      Code:
      SELECT * FROM geraete
        RIGHT JOIN geraetetyp USING (gt_id)
        LEFT  JOIN werkstatt_hat_geraete USING (g_id)
        WHERE werkstatt_hat_geraete.raum_nr = '$_GET[raum_nr]'
          OR werkstatt_hat_geraete.raum_nr IS NULL
      beachte:
      IS NULL, anstatt (falsch) = NULL.

      Kommentar


      • #4
        Danke dass war genau das was ich brauchte

        WHERE werkstatt_hat_geraete.raum_nr = '$_GET[raum_nr]'
        OR werkstatt_hat_geraete.raum_nr IS NULL

        hatte ich bereits versuche, hatte aber nicht das ergebniss welches ich wollte. Nehme an weil er für die zuordungen einfach raumnummer anderer werkstätten geliefert bekommen hat.

        Kommentar


        • #5
          Die Variante ist falsch und deine Erklärung, warum falsch, ist richtig.

          Kommentar


          • #6

            Kommentar

            Lädt...
            X