... WHERE Feldname IN ( SELECT .....) geht nicht

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

  • ... WHERE Feldname IN ( SELECT .....) geht nicht

    Hallo allerseits,

    ich habe folgende Abfrage über phpMyAdmin ausgeführt und bekam diese Fehlermeldung:
    PHP-Code:
    SELECT ADR05ADR08ADR10 FROM SFWADR WHERE ADR02 IN (SELECT KDKNR FROM TKDKDAL0); 
    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT KDKNR
    FROM TKDKDAL0 ) LIMIT 0, 30' at line 5
    Wo liegt denn das Problem? Wenn ich die Abfragen einzeln ausführe klappt es, aber als Unterabfrage möchte er nicht.

    Ich habe MySQL 4.0.1.8.

    Danke vorab

    Viele Grüße

    Otto

  • #2
    subselects gehen afaik erst ab 4.1
    Kissolino.com

    Kommentar


    • #3
      vielen Dank für die schnelle Antwort.

      Muß ich jetzt die Abfrage von Innen nach Außen separat ausführen und den Wert an die nächst höhere Abfrage übergen? Bischen aufwendig oder?? Gibt es keine andere Möglichkeit?

      Danke nochmal

      Gruß, Otto

      Kommentar


      • #4
        JOIN ist dein freund ... schau mal in das sticky hier im forum.
        Kissolino.com

        Kommentar


        • #5
          Danke für den Tipp!

          Hallo,

          danke für den Hinweis. Das sieht besser aus. Ich habe es zwar bis jetzt noch nicht getestet, aber ich werde es morgen in der Firma testen. Das könnte auch die Lösung für mein Problem mit der Geschwindigkeit sein. Meine PHP-Seiten brauchen teilweise über 3 Minuten bis sie sich aufbauen :-( Die Tabellen haben teilweise über 200 000 Datensätze.

          Jetzt habe ich folgendes
          PHP-Code:
          SELECT ADR05ADR08ADR10
          FROM SFWADR
          WHERE ADR01 
          '$DLR' AND ADR02 IN
          (SELECT KDKNR FROM TKDKDAL0 WHERE KDFNR '$DLR' AND KDLFN '$KDLFN'
          umgeformt in eine JOIN-Version:
          PHP-Code:
          SELECT ADR05ADR08ADR10
          FROM SFWADR INNER JOIN TKDKDAL0 ON SFWADR
          .ADR02 TKDKDAL0.KDKNR 
          WHERE SFWADR
          .ADR01 '$DLR' AND TKDKDAL0.KDFNR '$DLR' AND KDLFN '$KDLFN' 
          Ist es so richtig?
          Die Variablen werden mittels PHP übergeben.

          Ich habe versucht etwas komplexers (jedenfalls für mich ;-)) von subselect nach JOIN zu übersetzen, aber leider nicht geschafft. Hier mein Code:
          PHP-Code:
          SELECT SOSNRSOSNASOLKZSOSTRSOHNRSOPLZSOORT FROM TKDFTEST.TKDSTO
              WHERE SOFNR 
          '$DLR' AND SOSNR IN (SELECT GSSTO FROM TKDFTEST.TKDGST
                  WHERE GSFNR 
          '$DLR' AND GSGID IN (SELECT KDGID FROM TKDFTEST.TKDKDA 
                      WHERE KDLFN 
          '$KDLFN'
          Kannst du mir dabei helfen?

          Vielen Dank nochmal

          Gruß
          Otto

          Kommentar


          • #6
            PHP-Code:
            SELECT 
                   SFWADR
            .ADR05SFWADR.ADR08SFWADR.ADR10
            FROM 
                   SFWADR 
                   INNER JOIN TKDKDAL0 ON SFWADR
            .ADR02 TKDKDAL0.KDKNR 
            WHERE SFWADR
            .ADR01 '$DLR' 
            AND TKDKDAL0.KDFNR '$DLR' 
            AND tabellenname.KDLFN '$KDLFN' 
            es macht sinn, alle feldnamen mit tabellenprefix zu versehen ... zahlenwerte müssen nicht in '' (das aber nur am rande) und dann stellt sich die frage nach den indizes ... ein index über die spalten, die du mit WHERE abfragst bzw. JOINst sollte einiges bringen.

            btw: spaltennamen VERSAL zu schreibe, erhöht nicht gerade die lesefreundlichkeit
            Kissolino.com

            Kommentar


            • #7
              Danke

              Hallo,

              vielen Dank für deine Hilfe.

              Ja, mit tabellenprefix für die Spalten zu arbeiten macht Sinn, bin manchmal etwas faul ;-)

              btw: spaltennamen VERSAL zu schreibe, erhöht nicht gerade die lesefreundlichkeit
              Was meinst du mit "VERSAL"?

              Jetzt dauern die Abfragen nicht all zu lange. Es lag daran, daß die Tabellen teilweise über 500.000 Datensätze haben und ich hatte nur einen Parameter für WHERE-Klausel gehabt. Jetzt habe ich noch ein paar Parameter und ist damit besser geworden.

              Viele Grüße
              Otto

              Kommentar


              • #8
                Re: Danke

                Original geschrieben von otto-mueller
                Was meinst du mit "VERSAL"?
                OffTopic:
                - VERSAL
                - Gemischt
                - kleingeschrieben

                VERSALIEN = Grossbuchstaben sind lese-unfreundlicher, weil sich das Auge an Blöcken aus Ober- und Unterlängen orientiert, die bei GROSSBUCHSTABEN NICHT EXISTIEREN. Deshalb kann man einen Text in gemischter oder kleiner Schreibweise schneller/besser erfassen.
                [endofminitypografiekurs]
                Kissolino.com

                Kommentar

                Lädt...
                X