INNER JOIN klappt nicht mehr

INNER JOIN klappt nicht mehr

am 14.12.2005 08:47:19 von ruettger

Hallo zusammen,

mmmh, ich weiß nicht mehr weiter. In einer bestehenden Datenbank klappte
bisher immer das folgende Statement:

SELECT d.vorname, d.name, f.titel FROM darsteller d, film f
INNER JOIN rollen r
ON d.darID = r.darsteller AND f.filmID = r.film;

Auf dem Server 5.0.13 meldet er mir nun, dass er die Spaltenbezeichnung
d.darID nicht kennt??? (Also die ist vorhanden!!!)

Alternativ kann ich zwar auch

SELECT d.vorname, d.name, f.titel FROM darsteller d, film f, rollen r
WHERE d.darID = r.darsteller AND f.filmID = r.film;

verwenden, aber ich verstehe nicht, warum er das mit obigem Statement
nicht mehr macht. Bisher klappte das immer? Kann mir da jemand auf die
Sprünge helfen?

Viele Grüße, Michael

Re: INNER JOIN klappt nicht mehr

am 14.12.2005 09:13:53 von Christian Kirsch

Michael Rüttger schrieb:
> Hallo zusammen,
>
> mmmh, ich weiß nicht mehr weiter. In einer bestehenden Datenbank klappte
> bisher immer das folgende Statement:
>
> SELECT d.vorname, d.name, f.titel FROM darsteller d, film f
> INNER JOIN rollen r
> ON d.darID = r.darsteller AND f.filmID = r.film;
>
> Auf dem Server 5.0.13 meldet er mir nun, dass er die Spaltenbezeichnung
> d.darID nicht kennt??? (Also die ist vorhanden!!!)
>
> Alternativ kann ich zwar auch
>
> SELECT d.vorname, d.name, f.titel FROM darsteller d, film f, rollen r
> WHERE d.darID = r.darsteller AND f.filmID = r.film;
>
> verwenden, aber ich verstehe nicht, warum er das mit obigem Statement
> nicht mehr macht. Bisher klappte das immer? Kann mir da jemand auf die
> Sprünge helfen?
>

Möglicherweise ist das ein Bug, der in 5.0.16 behoben wurde. Google
bitte mal in den älteren Nachrichten in dieser Gruppe, ich glaube mich
daran erinnern zu können, dass andere hier ähnliche Schwierigkeiten
hatten.

Re: INNER JOIN klappt nicht mehr

am 14.12.2005 10:15:01 von Dominik Echterbruch

Michael Rüttger wrote:
> Hallo zusammen,
>
> mmmh, ich weiß nicht mehr weiter. In einer bestehenden Datenbank klappte
> bisher immer das folgende Statement:
>
> SELECT d.vorname, d.name, f.titel FROM darsteller d, film f
> INNER JOIN rollen r
> ON d.darID = r.darsteller AND f.filmID = r.film;

Was mir zunächst mal auffällt ist, daß die Join-Bedingung für die
Tabelle darsteller in der Join-Bedingung von film und rollen befindet.
Die würde ich ins WHERE verschieben. Ist IMHO sauberer und verringert
die Gefahr falscher Ergebnisse durch blödsinnige Effekte in der DB.

> Auf dem Server 5.0.13 meldet er mir nun, dass er die Spaltenbezeichnung
> d.darID nicht kennt??? (Also die ist vorhanden!!!)

Ja, das wurde hier schon mehrfach geklärt. Allerdings gebe ich zu, daß
es schwierig ist, danach zu suchen :)

Es ist so, daß in MySQL ab Version 5.0.irgendwas die Prioritäten von ','
und JOIN verändert wurden. Das ganze wurde - wie von Christian richtig
erkannt - zwischenzeitlich wieder geändert.

Also entweder installierst du eine neuere MySQL-Version oder du
schreibst das Statement um. Es funktioniert sowohl mit ausschließlich
INNER JOIN oder ausschließlich ',' Operatoren.

> SELECT d.vorname, d.name, f.titel FROM darsteller d, film f, rollen r
> WHERE d.darID = r.darsteller AND f.filmID = r.film;

Das ist die eine Möglichkeit, aber ich bevorzuge:

SELECT d.vorname, d.name, f.titel
FROM darsteller d
INNER JOIN rollen r ON r.darsteller = d.darID
INNER JOIN film f ON f.filmID = r.film;


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: INNER JOIN klappt nicht mehr

am 14.12.2005 10:31:44 von Harald Fuchs

In article <1h7jxiz.1c9j25h1lsbmiqN%ruettger@gmx.de>,
ruettger@gmx.de (Michael Rüttger) writes:

> Hallo zusammen,
> mmmh, ich weiß nicht mehr weiter. In einer bestehenden Datenbank klappt=
e
> bisher immer das folgende Statement:

> SELECT d.vorname, d.name, f.titel FROM darsteller d, film f
> INNER JOIN rollen r
> ON d.darID =3D r.darsteller AND f.filmID =3D r.film;

> Auf dem Server 5.0.13 meldet er mir nun, dass er die Spaltenbezeichnung
> d.darID nicht kennt??? (Also die ist vorhanden!!!)

> Alternativ kann ich zwar auch

> SELECT d.vorname, d.name, f.titel FROM darsteller d, film f, rollen r
> WHERE d.darID =3D r.darsteller AND f.filmID =3D r.film;

> verwenden, aber ich verstehe nicht, warum er das mit obigem Statement
> nicht mehr macht. Bisher klappte das immer? Kann mir da jemand auf die
> Sprünge helfen?

Du hast einen Bug in MySQL ausgenutzt, der neuerdings endlich behoben
ist. Gemäß SQL-Standard bindet ein expliziter JOIN stärker als ein
impliziter, also

FROM darsteller d, (film f JOIN rollen r ON d.darID =3D r.darsteller)

und innerhalb der Klammerung ist d.darID natürlich unbekannt.

Die Mischung von expliziten und impliziten JOINs führt eigentlich
immer zu Verwirrung. Ich würde die ausschließliche Verwendung
expliziter JOINs empfehlen.

Re: INNER JOIN klappt nicht mehr

am 15.12.2005 09:01:06 von ruettger

Harald Fuchs wrote:

> ...
>
> Du hast einen Bug in MySQL ausgenutzt, der neuerdings endlich behoben
> ist. Gemäß SQL-Standard bindet ein expliziter JOIN stärker als ein
> impliziter, also
>
> FROM darsteller d, (film f JOIN rollen r ON d.darID = r.darsteller)
>
> und innerhalb der Klammerung ist d.darID natürlich unbekannt.
>
> Die Mischung von expliziten und impliziten JOINs führt eigentlich
> immer zu Verwirrung. Ich würde die ausschließliche Verwendung
> expliziter JOINs empfehlen.

Hi,

mmh, also das mit dem Bug ist offensichtlich nicht behoben, denn ich
habe mir gestern fluchs die 5.0.16 installiert und - peng, das gleiche
Problem. Was mir allerdings klar ist, ist die oben stehende Erklärung
und mit expliziten JOINs funktioniert es auch.

Vielen Dank an alle!!!