Andreas: Mehrere (mysql)Tabellen gleichzeitig ansprechen (perl)

Hallöchen

Ich hab da mal ein kleines problemchen, ich würde gerne mehrere Tabellen gleichzeitig abfragen und zwar:
my $sth = $dbh->prepare(q{SELECT * FROM members, kontakt_entrie, WHERE
(members.mem_id=kontakt_entrie.mem_id) AND ..............
funktioniert wunderbar. Es wird in beiden geprüft ob die mem_id da ist , und dann gehts weiter.

Nun meine Frage :

Ich hab gelesen dass es auch bei mehr als 2 Tabellen geht, leider funktionert das hier nicht:

my $sth = $dbh->prepare(q{SELECT * FROM members, kontakt_entrie, no_members WHERE
(members.mem_id=kontakt_entrie.mem_id) OR (no_members.mem_id=kontakt_entrie.mem_id) AND........
Ergibt eine Fehlermeldung die ich noch nie gehört hab: Column: 'fname' in where clause is ambiguous
Die Fehlermeldung gibt aus, dass in der Spalte 'fname' Einträge mehr-doppel oder zweideutig sind. Ist ja auch klar, die Member dürfen ja den gleichen vornamen haben, das ist ja auch nicht der primary_key.

Vielleicht weiss ja jemand von Euch besser bescheid. Vielen Dank im voraus.
gruss
Andreas

  1. Hallöchen

    Tach,

    Ich hab gelesen dass es auch bei mehr als 2 Tabellen geht, leider funktionert das hier nicht:

    my $sth = $dbh->prepare(q{SELECT * FROM members, kontakt_entrie, no_members WHERE
    (members.mem_id=kontakt_entrie.mem_id) OR (no_members.mem_id=kontakt_entrie.mem_id) AND........
    Ergibt eine Fehlermeldung die ich noch nie gehört hab: Column: 'fname' in where clause is ambiguous
    Die Fehlermeldung gibt aus, dass in der Spalte 'fname' Einträge mehr-doppel oder zweideutig sind. Ist ja auch klar, die Member dürfen ja den gleichen vornamen haben, das ist ja auch nicht der primary_key.

    Klasse, daß Du den entscheidenden Teil der WHERE-clause weggelassen hast, nämlich den, in dem das angemeckerte fname vorkommt.
    Und auch die Tabellenbeschreibungen fehlen.
    Daher kann man nur raten
    Vermutlich reicht es aus, genauso wie z.B. bei der mem_id einfach den Namen der Tabelle davorzuschreiben, aus der das fname verwendet werden soll.

    Andreas

    1. Hallo,

      Der Teil, der angemeckert wird, ist genau der Gleiche wie im es mit 2. Tabellen funktioniert. Daran kann es einfach nicht liegen, weil ich die Tabelle einzeln ansprechen, bearbeiten, auslesen usw kann. Nur in verbindung mit den anderen beiden Tabellen gibt es probleme. Nämlich nur dann wenn ich :

      my $sth = $dbh->prepare(q{SELECT * FROM members, kontakt_entrie, no_members WHERE
      (members.mem_id=kontakt_entrie.mem_id) OR (no_members.mem_id=kontakt_entrie.mem_id) AND........

      schreibe. Die mem_id ist in allen 3 tabellen vorhanden. Entweder in der members und der kontakt_entrie. Oder aber in der no_members und der kontakt_entrie. Deswegen ja die obere abfrage.

      der angemeckerte teil wird abgefragt durch eine sucheingabe:
      AND (fname LIKE ?) AND....weitere suchmuster..... aber wie gesagt , das kann nicht der Fehler sein.

      Gruss
      Andreas

      1. Hallo,

        der angemeckerte teil wird abgefragt durch eine sucheingabe:
        AND (fname LIKE ?) AND....weitere suchmuster..... aber wie gesagt , das kann nicht der Fehler sein.

        Na ja, der Fehler könnte durchaus gerade hier zu suchen sein. Dann nämlich, wenn in (mindestens) zwei der verknüpften Tabellen ein Feld mit dem Namen fname vorhanden ist. Dann 'weiß' mySQL nicht mehr welches der beiden Tabellenfelder nun von Dir gemeint ist, und gibt die angesprochene Fehlermeldung aus.

        BTW.: Du solltest Dich einmal mit JOIN beschäftigen. Neben einer angemessenen Formatierung des Statements würde das der Leserlichkeit, und damit auch der Verständlichkeit, eines Statements durchaus förderlich sein.

        Grüße
          Klaus