Query Problem

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

  • Query Problem

    Hallo,

    ich hab ein Problem mit einem Query, woraus ich nicht ganz schlau werde.

    Es gibt einträge in Tabelle A, welche auch in Tabelle B auftauchen können, aber nicht müssen. Nun brauch ich ein Query, was mir Einträge aus A holt die nicht in B drin sind, (anhand der Spalte ID)
    Aber ich komm nicht dahinter, wie das query aussehen soll.

    Ich muss ein Join anhand der Unterschiede und nicht der Gemeinsamkeit machen, so wie ich das sehe, also nicht wo A.id=B.id sondern dort wo A.id nicht B.id vorhanden ist ( was ja NICHT A.id != B.id) wäre
    Zuletzt geändert von Seikilos; 15.02.2008, 12:28.
    SQL Injection kitteh is...

  • #2
    Code:
    ... tabelle1 A
        LEFT JOIN tabelle2 B ON (A.id=B.id AND ISNULL(B.id))
    ^^ sollte klappen ... ungetestet ... syntax-errors(?)

    http://dev.mysql.com/doc/
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Ah so ein ISNULL hat mir gefehlt.

      Danke!
      SQL Injection kitteh is...

      Kommentar


      • #4
        Code:
        SELECT
        	a.attr_1,
        	a.attr_2,
        	...
        FROM
        	a
        WHERE
        	a.id NOT IN(
        		SELECT
        			b.id
        		FROM
        			b
        	)
        Gruss
        H2O

        Kommentar


        • #5
          Subselects vermeide ich eigentlich. Letztens hat so ein Sub select ein Result Set in knapp einer Minute geliefert... Obwohl das Select nur eine Reihe geholt hat. Das gleiche mit Left Join dauert 0.02 sek
          SQL Injection kitteh is...

          Kommentar


          • #6
            Original geschrieben von Seikilos
            Subselects vermeide ich eigentlich. Letztens hat so ein Sub select ein Result Set in knapp einer Minute geliefert... Obwohl das Select nur eine Reihe geholt hat. Das gleiche mit Left Join dauert 0.02 sek
            Da ich das nicht galuben konnte, habe ich ein paar Tests gemacht. Zwei Tabellen mit jeweils
            Code:
            id int, unsigned, autoincrement
            name varchar(20)
            tab1 100'000 Einträge mit Zufallswerten, tab2 ein Subset davon mit 66'666 Einträgen => Resultatset liefert 33'334 Sätze
            Resultat (PMA): 5 Durchläufe mit
            PHP-Code:
            SELECT a.ida.name
            FROM tab1 a
            LEFT JOIN tab1 b ON 
            a.id b.id )
            WHERE ISNULLb.id 
            1.0039 Sekunden (Die Version von Abraxax geht so nicht, weil die ISNULL-Abfrage natürlich nicht in die JOIN-Bedingung gehört).
            5 Durchläufe mit
            PHP-Code:
            SELECT  a.ida.name
            FROM tab1 a
            WHERE a
            .id NOT IN (
                
            SELECT b.id
                FROM tab4 b

            0.9939 Sekunden.
            Der Unterschied ist also vernachlässigbar. Die Resultate mit dem SQL-Monitor waren vergleichbar.
            Also am Subselect kann also die Performanceinbusse nicht grundsätzlich liegen. Aber wenn es sein muss, schaff ich natürlich auch einen Subselect, der viel, viel länger läuft ....
            Gruss
            H2O

            Kommentar


            • #7
              Ich hab es dort auch nicht erwartet, aber der Query war so simpel und es wurde nur eine Zeile zurückgegeben und dennoch so lahm.
              Nach dem indezieren der besagten Spalten waren es schon 10 sekunden, aber immernoch viel zu langsam
              SQL Injection kitteh is...

              Kommentar


              • #8
                Original geschrieben von H2O
                weil die ISNULL-Abfrage natürlich nicht in die JOIN-Bedingung gehört).
                dann schreibe statt "ISNULL(spalte)" einfach "spalte IS NULL" ;-)
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar

                Lädt...
                X