[Beigelegt] MySQL-Massaker: INNER JOIN, LEFT JOIN, NIX JOIN :( - Wer kann helfen?

  • Hi,


    ich zrbrech mir jetzt schon seit Stunden das Hirn, aber ich krieg die ABfrage einfach nicht auf die Reihe.


    Folgende Situation:


    2 MySQL Tabellen
    Es sollen alle die Zeilen ausgegeben werden die in der ersten Tabelle, aber nicht in der zweiten Tabelle enthalten sind und die Bedingungen A und B erfüllen.


    Mit

    SQL
    SELECT tabelle1.* FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.id = tabelle2.id WHERE tabelle2.id IS NULL;


    sind alle Zeilen aus tabelle1 weg, die in tabelle2 drin sind - so weit so gut.


    Zusätzlich sollen aber auch alle die Zeilen weg, die die Bedingungen

    Code
    tabelle1.wert1 = '1' AND tabelle1.wert2 = '1'


    erfüllen.


    Und da hakt es.


    Wer kann helfen? *lieb_drein_schau*


    Danke und Gruss


    Macavity

    Capulet:
    HW: Dell Dimension 3100, Pentium 4 3GHz, 2GB RAM, 160GB HDD (System), 1TB HDD (Video), 1 x TT S2-1600, 1 x Technisat Skystar HD | SW: Debian 7.4, VDR 2.0.4 (selfcompiled), dummydevice 2.0.0, streamdev-server 0.6.1, NFS-Server


    TiViPi01:
    HW: Raspberry Pi Mod. B Rev. 2, 512MB RAM, 8GB SD-Card, Teko TEK-BERRY.9 Gehäuse, Ednet 85024 USB 2.0 Hub, Digitainer X10 Funk-Fernbedienung | SW: Raspbian 01/2014, VDR 2.0.4 (selfcompiled), rpihddevice 0.0.8, ffmpeg 1.0.8, streamdev-client 0.6.1, NFS-Client

    Einmal editiert, zuletzt von Macavity ()

  • Oder so:

    SQL
    SELECT * FROM tabelle1 WHERE NOT EXISTS (SELECT tabelle2.id FROM tabelle2 WHERE tabelle1.id = tabelle2.id AND tabelle2.id IS NULL)
    AND tabelle1.wert1 = '1' AND tabelle1.wert2 = '1'


    oder so: (nicht so performant)

    SQL
    SELECT * FROM tabelle1 where tabelle1.id not in (SELECT tabelle2.id FROM tabelle2 WHERE tabelle2.id IS NULL) AND tabelle1.wert1 = '1' AND tabelle1.wert2 = '1'


    Gruß
    Tarandor


    Edit:
    Die richtigen Feldnamen mal noch eingetragen. :)

  • Hi,


    danke für die Hilfe.


    Das von Hulk klappt schon ganz gut. Ich hatte erst versucht den Subquery in den LEFT JOIN zu pressen, bekam aber immer komischerweise die gleiche Anzahl Zeilen zurück.


    Was mit dabei dann noch aufgefallen ist, das einige der Werte in Tabelle 2 möglicherweise gar nicht die Bedingungen der Tabelle1 erfüllen. Jetzt muss ich erstmal suchen, wie ich die da weg bekomme.


    Danke für Eure Hilfe!


    Gruss


    Macavity

    Capulet:
    HW: Dell Dimension 3100, Pentium 4 3GHz, 2GB RAM, 160GB HDD (System), 1TB HDD (Video), 1 x TT S2-1600, 1 x Technisat Skystar HD | SW: Debian 7.4, VDR 2.0.4 (selfcompiled), dummydevice 2.0.0, streamdev-server 0.6.1, NFS-Server


    TiViPi01:
    HW: Raspberry Pi Mod. B Rev. 2, 512MB RAM, 8GB SD-Card, Teko TEK-BERRY.9 Gehäuse, Ednet 85024 USB 2.0 Hub, Digitainer X10 Funk-Fernbedienung | SW: Raspbian 01/2014, VDR 2.0.4 (selfcompiled), rpihddevice 0.0.8, ffmpeg 1.0.8, streamdev-client 0.6.1, NFS-Client

  • Moin!


    Zitat

    Original von Hulk
    Wie wäre es mit einem Subquery ?


    PHP
    SELECT tabelle1.* FROM tabelle1
      WHERE 
      tabelle1.wert1 != '1' 
      and tabelle1.wert2 != '1'
      and tabelle1.id not in 
          ( SELECT tabelle2.id FROM tabelle2 )


    Ich hab zwar nicht viel Ahnung vom MySQL-Dialekt, aber wenn alle Zeilen weg sollen, die wert1=1 UND wert2=1 haben, dann ist die logische Umkehrung wert1 != 1 ODER wert2 != 1, oder? Und das muss dann in Klammern, damit es zusammen ausgewertet wird und nicht das letzte AND da mit rein spielt.
    Also:

    PHP
    SELECT tabelle1.* FROM tabelle1
      WHERE 
      (tabelle1.wert1 != '1' 
       or tabelle1.wert2 != '1')
      and tabelle1.id not in 
          ( SELECT tabelle2.id FROM tabelle2 )


    mini.

  • Zitat

    Original von Macavity
    Es sollen alle die Zeilen ausgegeben werden die in der ersten Tabelle, aber nicht in der zweiten Tabelle enthalten sind und die Bedingungen A und B erfüllen.


    Nur so aus Neugier, warum gibt es überhaupt zwei mal die gleiche Tabelle ?

    Powered by Point of View ION330 und Mystique SaTiX-S2 Dual
    Geguckt wird auf einem 52PFL5605H/12 per HDMI mit Atmolight Quattro
    Audio optisch per Yamaha RX-V459 auf einem Teufel Concept P
    Non-TV content über XBMC und boblight
    Remote Harmony 525 durch Atric-IR
    Remote und Streaming mit Motorola XOOM und AndroVDR sowie Daroon Player
    Streaming auf ZBOX ID-81 und Desktop per streamdev
    All based on selfbuild OpenenELEC master


    Nebenbei noch ein par andere VDRs

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!