Announcement

Collapse
No announcement yet.

Problem mit SQL Abfrage-Bedingung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit SQL Abfrage-Bedingung

    Hallo,

    ich habe folgendes Problem im Bedingungsteil der Abfrage:

    Folgende Tabellen sind vorhanden:

    Kontoauszug:
    ID|Buchungstag|Zahlungspflichtiger|Verwendungszwec k|...

    Mieter:
    ID|Name|Vorname|...

    Nun möchte ich die Zeilen auslesen, welche irgendwo im Verwendungszweck oder in der Spalte Zahlungspflichtiger den Namen eines Mieters beinhaltet. Leider kann der Name irgendwo innerhalb des Strings Verwendungszweck oder Zahlungspflichtiger stehen und ich habe noch keine Möglichkeit gefunden diese Zeilen herauszufiltern.

    Soetwas wie:

    [highlight=sql]
    SELECT
    Mieter.Name, Mieter.Vorname, Kontoauszug.Zahlungspflichtiger, Kontoauszug.Verwendungszweck
    FROM
    Kontoauszug, Mieter
    Where
    Kontoauszug.Zahlungspflichtiger like %Mieter.Name%
    OR Kontoauszug.Verwendungszweck like %Mieter.Name%;
    [/highlight]

    Funktioniert aber natürlich nicht. Als DBMS benutze ich MS Access.

    Vielleicht kennt jemand die Lösung meines Problems.

    Vielen Dank im voraus,
    Sidewalker
    Zuletzt editiert von Sidewalker; 10.11.2010, 15:51.

  • #2
    [highlight=sql]
    SELECT
    Mieter.Name, Mieter.Vorname, Kontoauszug.Zahlungspflichtiger,
    Kontoauszug.Verwendungszweck
    FROM
    Kontoauszug, Mieter
    Where
    (Kontoauszug.Zahlungspflichtiger like '%Mieter.Name%') OR
    (Kontoauszug.Verwendungszweck like '%Mieter.Name%`);
    [/highlight]
    Es fehlt zudem die Join-Bedingung zwischen Kontoauszug und Miteter

    Comment


    • #3
      ... und es fehlt die Formatierung von SQL in Beiträgen.
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Originally posted by markus kinzler View Post
        [highlight=sql]
        where
        (kontoauszug.zahlungspflichtiger like '%mieter.name%') or
        (kontoauszug.verwendungszweck like '%mieter.name%`);
        [/highlight]
        Vielen Dank für die Antwort. Leider scheint das noch nicht die Lösung meines Problems zu sein.

        Wird nicht bei obrigem Vergleich nach einem Eintrag gesucht der [irgendwas]mieter.name[irgendwas] beinhaltet. Woher weiß der Parser, dass er in der Tabelle Mieter, die Namen durchsuchen muss und nicht nach oben genannter Zeichenfolge sucht?

        Hoffe ich konnte mein Problem erläutern.

        Danke,
        Sidewalker

        Comment


        • #5
          Es fehlt, wie schon geschrieben, die Joinbedingung:
          [highlight="sql"]
          SELECT
          m.Name, mVorname,
          k.Zahlungspflichtiger, k.Verwendungszweck
          FROM
          Kontoauszug k
          join Mieter m on m. ... = k. ...
          WHERE
          (k.Zahlungspflichtiger LIKE '%Mieter.Name%') OR
          (k.Verwendungszweck LIKE %Mieter.Name%);
          [/highlight]

          Comment


          • #6
            Vielen Dank Markus,
            nachdem ich jetzt eine Joinbedingung eingebaut habe (hoffentlich sinnvoll), kann ich mir zumindest schonmal die Zeilen ausgeben lassen, in denen im Verwendungszweck oder im Feld Zahlungspflichtiger nur der Nachname steht. D.h. steht im Verwendungszweck nur Müller und habe ich in der Mieterliste einen Müller, wird mir die Zeile ausgegeben. Steht allerdings im Verwendungszweck Dr. P. Müller wird diese Zeile leider nicht ausgegeben.

            Das erste Beispiel (nur Müller) funktionierte mit folgendem Code:
            [highlight=sql]
            INSERT INTO
            Zahlungseingang ( KontoauszugsID, Buchungstag, Valuta, Zahlungspflichtiger, Verwendungszweck, Umsatz, Soll_Haben, MieterID )
            SELECT
            k.ID, k.Buchungstag, k.Valuta, k.Zahlungspflichtiger, k.Verwendungszweck, k.Umsatz, k.Soll_Haben, m.ID
            FROM
            Kontoauszug AS k
            INNER JOIN Mieter AS m ON (m.Name=k.Zahlungspflichtiger)
            OR (m.Name = k.Verwendungszweck)
            WHERE (k.Zahlungspflichtiger LIKE m.Name) OR (k.Verwendungszweck LIKE m.Name);[/highlight]

            Leider ergab folgende Änderung überhaupt kein Ergebnis mehr:
            [highlight=sql]
            WHERE (k.Zahlungspflichtiger LIKE '%m.Name%') OR (k.Verwendungszweck LIKE '%m.Name%')
            [/highlight]

            Und Folgendes ist syntaktisch nicht richtig:
            [highlight=sql]
            WHERE (k.Zahlungspflichtiger LIKE ('%'m.Name'%')) OR (k.Verwendungszweck LIKE ('%'m.Name'%'))
            [/highlight]

            Ich bin leider ratlos.

            Wäre für eine weitere Idee sehr dankbar.

            Sidewalker

            Comment


            • #7
              Hallo,
              Originally posted by Sidewalker View Post
              ...Leider ergab folgende Änderung überhaupt kein Ergebnis mehr:
              [highlight=sql]
              WHERE (k.Zahlungspflichtiger LIKE '%m.Name%') OR (k.Verwendungszweck LIKE '%m.Name%')
              [/highlight]
              Da wird ja auch mit dem Literal 'm.Name' verglichen.
              Originally posted by Sidewalker View Post
              ...
              Und Folgendes ist syntaktisch nicht richtig:
              [highlight=sql]
              WHERE (k.Zahlungspflichtiger LIKE ('%'m.Name'%')) OR (k.Verwendungszweck LIKE ('%'m.Name'%'))
              [/highlight]
              Ja klar, da fehlt auch ein Verkettungsoperator. Ich kenne die "Eigenheiten" von Access (zum Glück) nicht, aber mögliche Verkettungsoperatoren sind +, || oder die Funktion CONCAT.
              [highlight=sql]
              ...
              WHERE (k.Zahlungspflichtiger LIKE CONCAT('%', m.Name, '%')) OR (k.Verwendungszweck LIKE CONCAT('%', m.Name, '%'))
              [/highlight]

              Allerdings macht das Ganze in der Where-Bedingung überhaupt keinen Sinn, da bereits in der Join-Bedingung eine stärkere Einschränckung (m.Name=k.Zahlungspflichtiger) verwendet wird.
              Du kannst also die Where-Klausel weglassen und solltest das LIKE in der Join-Bedingung einsetzen.

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment

              Working...
              X