Syntax-Problem MySQL mit INNER JOIN

  • Ich habe ein Problem, das ich irgendwie einfach nicht checke.
    Das INNER JOIN kenn ich recht gut und ich denke das muss wohl richtig sein, da es bei anderen Beispielen funktioniert hat.

    Nur bei diesem einen SQL Statement habe ich ein Syntax-Problem, welches ich nicht begreife.
    Es handelt sich um:

    PHP
    SELECT
        `surveys`.`id` as `sid`,
        `surveys`.`datum` as `dat`,
        `shops`.`name` as `snam`,
        `seller`.`name` as `nam`,
        `seller`.`fname` as `fnam`
    FROM
        `surveys`
    INNER JOIN
        `shops` ON `surveys`.`shop` = `shops`.`id` AND `seller` ON `suverys`.`seller` = `seller`.`id`

    Und es gibt folgenden Fehler aus:

    Zitat von localhost

    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 'ON `suverys`.`seller` = `seller`.`id`' at line 10

    Die Tabellen existieren und die Verbindung muss funktionieren, die Verbindungspunkte stimmen überein und es müsste auch etwas ausgeben.
    Danke für Hilfe.

    Einmal editiert, zuletzt von Thonixx (8. März 2010 um 12:19)

  • probiers mal so:

    bin mir aber auch nicht sicher wie das bei 3 Tabellen war^^

    Gruß crAzywuLf :D

    Einmal editiert, zuletzt von crAzywuLf (8. März 2010 um 12:38)

  • Danke, habs aber jetzt so:

    Hatte zuerst als Übergangslösung mal das:

    SQL
    SELECT
        `surveys`.`id` as `sid`,
        `surveys`.`datum` as `dat`,
        `shops`.`name` as `snam`,
        `seller`.`name` as `nam`,
        `seller`.`fname` as `fnam`
    FROM
        `surveys`, seller, shops
    WHERE
        surveys.seller = seller.id AND surveys.shop = shops.id

    Was von beidem ist jetzt schlauer?
    Ich würde mal die JOIN Lösung bevorzugen, aber du?

    EDIT:
    Bei dir ist ein kleiner Schreibfehler drin ;)
    Es heisst surveys und nicht suverys. Aber danke für die Hilfe.

  • Zitat

    Was von beidem ist jetzt schlauer?
    Ich würde mal die JOIN Lösung bevorzugen, aber du?

    Ist beides gleich performant, ich persöhnlich finde die multi-select Variante besser, weil Sie mir einfach übersichtlicher erscheint.

    Gruß crAzywuLf :D

  • Aber warum findest du das besser oder übersichtlicher?
    Ich finde persönlich die INNER JOIN Sache viel übersichtlicher, da man zumal mit OUTER JOIN, LEFT JOIN, RIGHT JOIN und anderen Dingen mehr Funktionalität hat, als nur mit dem WHERE.

    Was spricht also gegen JOIN und was für WHERE?

  • Aber warum findest du das besser oder übersichtlicher?

    Geschmackssache. INNER Join und die WHERE Variante sind gleich schnell. Ich mag es halt lieber wenn die Tabellen auf einen Haufen sind und die Bedingungen auf einem, außerdem ist es weniger zu schreiben :D


    Ich finde persönlich die INNER JOIN Sache viel übersichtlicher, da man zumal mit OUTER JOIN, LEFT JOIN, RIGHT JOIN und anderen Dingen mehr Funktionalität hat, als nur mit dem WHERE.

    Was spricht also gegen JOIN und was für WHERE?

    LEFT JOIN und RIGHT JOIN machen doch völlig andere Sachen. :confused:

    Gruß crAzywuLf :D

  • Ja aber ich verstehe nicht ganz, warum du lieber zeilenweise WHERE Bedinungen hast, wenn auch einfach ein JOIN reicht.
    Wurde JOIN nicht extra deswegen entwickelt?

  • wat weiß ich wofür der entwicklet wurd.. :)
    ich find zeilenweise joins auch kacke

    schreib mal des hier als join auf

    Code
    select s.name as 'skill', ms.wert
            from mitarbeiter m, rolle r, mit_skill ms, skill_roll sr, skills s
        where m.id = ms.mitarb_id
            and   r.id = sr.roll_id
            and   ms.skill_id = sr.skill_id
            and m.name = 'klopotek'
            and r.name = 'entwickler'
            and s.id = ms.skill_id
            and basic = 0
  • Okay, sagen wirs mal so, manchmal ist JOIN gut und manchmal einfach ein WHERE.
    Ich entscheide einfach je nach Situation ;)

  • Ich persönlich bevorzuge auch joins weil ich sie ebenfall viel übersichtlicher finde, das sind "unterschiedliche" where-bedingungen und die gehören für mich getrennt.
    Bei den einen geht es um die Bedingungen der Tabellenverknüpfungen, in den anderen um fest Wert "von außen".

    Ka, also da möchte ich meine Inner Joins nicht missen.

    Generell ist es aber letztendlich sowieso Geschmackssache, solange man da keine Vorgaben hat soll man das natürlich so machen wie man selber gut mit klarkommt.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook