Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL Abfrage mit join

Einklappen

Neue Werbung 2019

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

  • [Erledigt] SQL Abfrage mit join

    Hallo Zusammen,

    will aus einer Datenbank verschiedene Adressen filtern.

    Es sollen z. B alle Adressen angezeigt werden, die in der Tabelle "k_schl_w" ein oder mehrere Kriterien erfüllen.

    Meine Abfrage:

    Code:
    select adresse.anrede as anrede, adresse.nname,
          adresse.strasse as Strasse, adresse.land as Land,
          adresse.plz as PLZ, adresse.ort as Ort,
          adresse.postfach as Postfach, adresse.p_plz as PostfachPLZ,
          adresse.p_ort as PostfachOrt, adresse.briefanrede as Briefanrede,
          ansprechp.kdnummer as Kundennummer, adresse.suchname as Suchname
          from adresse
          INNER JOIN k_schl_w ON adresse.adressid = k_schl_w.adressid
          INNER JOIN ansprechp ON adresse.adressid = ansprechp.adressid and
          k_schl_w.name like "Kunden mit Nachzahlung" OR
          k_schl_w.name like "Fondskunde 25-100"
    Funktioniert aber nicht richtig.

    Wer kann mir hier helfen?

    Danke. Günther

  • #2
    Hi.

    Wäre natürlich hilfreich, wenn Du etwas genauer sagen würdest, was "funktioniert aber nicht richtig" genau heisst ...

    So gefühlsmässig würde ich sagen, dass

    Code:
     INNER JOIN ansprechp ON adresse.adressid = ansprechp.adressid and 
          k_schl_w.name like "Kunden mit Nachzahlung" OR 
          k_schl_w.name like "Fondskunde 25-100"
    eher so geklammert sein müsste:

    Code:
     INNER JOIN ansprechp ON adresse.adressid = ansprechp.adressid and 
          (k_schl_w.name like "Kunden mit Nachzahlung" OR 
          k_schl_w.name like "Fondskunde 25-100")
    Gruss
    Andreas

    Kommentar


    • #3
      Hallo Andreas,

      danke für Deinen Tipp.

      Die Abfrage funktioniert so schneller. Ist aber vom Ergebnis noch nicht richtig.

      Ich hatte gemeint, dass das Ergebnis nicht richtig sein kann, denn es kommen Datensätze mehrmals vor.

      Die Abfrage dauert auch verhältnismäßig sehr lange.

      Ist der Syntax meiner Abfrage eigentlich überhaupt richtig?

      Ich will auch mehrere Or bzw. And klauseln einbauen. Ist dabei etwas besonderes zu beachten?

      Danke und Gruss

      Günther

      Kommentar


      • #4
        Grundsätzlich ist "=" schneller als "like". Deshalb sind Abfragen mit "like" ohne "Wildcards" Quatsch. Und wenn du mehrere Bedingungen für das gleiche Attribut mit "or" verknüpfst, dann ist es besser "in" zu benutzen:
        Code:
        ...
              INNER JOIN ansprechp ON adresse.adressid = ansprechp.adressid 
              AND k_schl_w.name in ("Kunden mit Nachzahlung", "Fondskunde 25-100")
        Gruss
        L

        Kommentar


        • #5
          Hallo Lazydog,

          danke für die Info.

          Habe folgende Abfrage getestet:
          Code:
          select adresse.anrede as anrede, adresse.nname,
                adresse.strasse as Strasse, adresse.land as Land,
                adresse.plz as PLZ, adresse.ort as Ort,
                adresse.postfach as Postfach, adresse.p_plz as PostfachPLZ,
                adresse.p_ort as PostfachOrt, adresse.briefanrede as Briefanrede,
                ansprechp.kdnummer as Kundennummer, adresse.suchname as Suchname
                from adresse, k_schl_w
                INNER JOIN ansprechp ON adresse.adressid = ansprechp.adressid
                AND k_schl_w.name in ("Kunden mit Nachzahlung", "Fondskunde 25-100")
          Aber 1. die Abfrage dauert sehr lange, ca. 120 sekunden in denen auf dem rechner gar nichts mehr geht.
          2. Das Ergebnis stimmt nicht. Es werden Kunden angezeigt, die nicht in der Tabelle "k_schl_w" einen übereinstimmenden Wert haben und es werden Kunden mehrfach angezeigt.

          Kannst Du Dir die komplette Abfrage nochmals ansehen und mir helfen? Danke.

          Gruss

          Günther

          Kommentar


          • #6
            Den Join mit k_schl_w brauchst du natürlich schon, ich habe bei mir einfach nur den Teil aufegführt, den ich geändert habe.
            Gruss
            L

            Kommentar

            Lädt...
            X