baccu: Tabellen mit JOIN verknüpfen

Hallo

Bevor ich hier platz und Zeit in Anspruch nehme, kann mir vieleicht jemand ein gutes Tutorial empfehlen zum Thema:

5 oder Mehr Tabellen mittels JOIN verbinden

Ich bekomme nämlich bei meinen Versuchen immer wieder die Fehlermeldung:
Syntaxfehler (fehlender Operator)in Abfrageausdruck.

hier noch der Quelltext falls jemand einen Lösungsanstz hat.

sql = "SELECT n.Nickname, n.Hotspot, n.Geschlecht, n.GYear, n.Groesse, h.dayFrom,"
+" h.monthFrom, h.yearFrom, h.dayTo, h.monthTo, h.yearTo, h.atHotspot,"
+" d.Nation, d.Augen, d.Gewicht, d.Haarfarbe, d.Beruf"
+" FROM name n"
+"  INNER JOIN Holibook h ON n.NickNr = h.NickNr"
+" INNER JOIN Detail d ON n.NickNr = d.NickNr"
+"  WHERE n.Hotspot =  'Berlin'"

var rs = db.Execute(sql);

danke
baccu

  1. echo $begrüßung;

    Ich bekomme nämlich bei meinen Versuchen immer wieder die Fehlermeldung:
    Syntaxfehler (fehlender Operator)in Abfrageausdruck.

    Wenn du ein Problem mit der Datenbank hast, ist es wesentlich sinnvoller mit speziell dafür vorgesehenen Programmen [*] zuerst die SQL-Syntax zu testen und dann das getestete Statement in irgendwelche Programme einzubauen.

    Woher kommt denn der Fehler? von der Datenbank? Vom Compiler? Hast du vielleicht nur ein Semikolon vergessen?

    echo "$verabschiedung $name";

    MS SQL-Server: Query Analyzer
    Oracle: SQL Plus
    MySQL: z.B. phpMyAdmin
    ...: ...

    1. MySQL: MySQL Query Browser

    2. Hi,
      Ich bekomme von der Datenbank folgenden Fehler im Browser angezeigt:
      Fehlertyp:
      Microsoft JET Database Engine (0x80040E14)
      Syntaxfehler (fehlender Operator) in Abfrageausdruck 'h.NickNr = n.NickNr LEFT OUTER JOIN Detail d ON d.NickNr = n.NickNr'.
      /holidaydate/search.asp, line 662

      Zeile 662 ist die Execute Zeile

      sql_a = "SELECT n.Nickname, n.Hotspot, n.Geschlecht, n.GYear, n.Groesse, h.dayFrom, h.monthFrom, h.yearFrom, h.dayTo, h.monthTo, h.yearTo, h.atHotspot, d.Nation, d.Augen, d.Gewicht, d.Haarfarbe, d.Beruf FROM name n LEFT OUTER JOIN Holibook h ON h.NickNr = n.NickNr LEFT OUTER JOIN Detail d ON d.NickNr = n.NickNr WHERE n.Hotspot =  'Berlin'";
        var ef = db.Execute(sql_a);

      und dieser Fehler tritt erst auf wenn ich den 2. JOIN einbaue.
      baccu

      1. Hallo baccu

        Microsoft JET Database Engine (0x80040E14)
        Syntaxfehler (fehlender Operator) in Abfrageausdruck 'h.NickNr = n.NickNr LEFT OUTER JOIN Detail d ON d.NickNr = n.NickNr'.

        Teste die Abfrage mit Microsoft Access.

        Laut Access-Hilfe gilt für SELECT folgende Syntax in Jet-SQL:

        SELECT [Prädikat] { * | Tabelle.* | [Tabelle.]Feld1 [AS Alias1] [, [Tabelle.]Feld2 [AS Alias2] [, ...]]}
            FROM Tabellenausdruck [, ...] [IN ExterneDatenbank]
            [WHERE... ]
            [GROUP BY... ]
            [HAVING... ]
            [ORDER BY... ]
            [WITH OWNERACCESS OPTION]

        Du solltest somit Marians Vorschlag befolgen und das AS nicht weglassen (was Du in anderen SQL-Dialekten kannst).

        Freundliche Grüße

        Vinzenz

  2. Hi,

    +"  INNER JOIN Holibook h ON n.NickNr = h.NickNr"

    AFAIK müsste es

    SELECT * FROM <tabelle>
    INNER JOIN <join_tabelle> ON (<join_tabelle>.<spalte> = <tabelle>.<spalte>)

    Heißen, wenn ich das richtig sehe gibst du den tabellen ein alias. geh
    ich da recht in der annahme? zwischen dem SELECT und FROM müssen auch
    die spaltennamen der Joinenden tabellen stehen damit du darauf zugreifen
    kannst.

    MfG

  3. Hi baccu,

    +"  INNER JOIN Holibook h ON n.NickNr = h.NickNr"
    +" INNER JOIN Detail d ON n.NickNr = d.NickNr"

    sicher, dass "Holibook h" und "Detail d" geht?
    Auf welcher zeile kommt denn der fehler? beim mysql-monitor (mysql\bin\mysql.exe) wird das angezeigt.

    Gruß, Marian