2010-12-15 4 views
0

Ich habe eine Website geerbt, die jemand anderes mit MySQL 4 als Datenbank gebaut und versuche, auf einen neuen Server mit MySQL 5 zu wechseln. Ich kopierte alle Dateien und dumped die Datenbank von MySQL Version 4 und dann wieder in Version 5 importiert.MySQL JOIN Abfrage arbeitete in Version 4, in 5

Jetzt funktioniert die Hälfte der Website, während die andere Hälfte nicht funktioniert. Ich erhalte die folgende:

Unknown column 'a.id_art' in 'on-Klausel'

Hier ist meine Frage:

SELECT *, aks.nazwa as sekcja, ak.nazwa kategoria 
FROM 
artykuly a, 
artykuly_kategorie ak, 
artykuly_sekcje aks 
LEFT JOIN artykuly_addons aad ON aad.id_art=a.id_art 
WHERE a.id_art = '20' AND ak.id_sek = aks.id_sek AND a.id_kat = ak.id_kat 

Warum die oben funktionieren in MySQL-Version 4 aber ist ein gebrochener Mann in Version 5?

+1

Nun, 'id_art' existiert in' artykuly'? –

+0

Dies hängt eher mit etwas zusammen, das während der Übertragung (dump/reload) fehlgeschlagen ist, als Unterschiede zwischen den MySQL-Versionen. Können Sie überprüfen, ob alle Tabellen vorhanden sind, mit den gleichen Spalten zuerst? – Konerak

+0

alle Tabellen existiert auch, wenn ich überprüfe id_art = '20 'gibt es einen solchen Artikel in der Datenbank – Cfaniak

Antwort

2

Wahrscheinlich verursacht die Kombination von LEFT JOIN und Verbinden mit Kommas und Filtern in der WHERE-Klausel das Problem. Versuchen Sie folgendes:

SELECT *, aks.nazwa as sekcja, ak.nazwa kategoria 
FROM 
artykuly a INNER JOIN artykuly_kategorie ak ON a.id_kat = ak.id_kat 
INNER JOIN artykuly_sekcje aks ON ak.id_sek = aks.id_sek 
LEFT JOIN artykuly_addons aad ON aad.id_art=a.id_art 
WHERE a.id_art = '20' 
+0

+1 für weitere Details, siehe http://dev.mysql.com/doc/refman/5.1/en/join.html, Abschnitt" Bearbeitungsänderungen in MySQL 5.0 beitreten " .12 " –

0

Der Vorrang des Komma ist jetzt niedriger als explizite Aussagen JOIN. Unter Angabe der MySQL 5.0 JOIN Syntax page:

Zuvor den Komma-Operator (,) und JOIN hatten beide die gleiche Vorrang, so der Ausdruck t1 verbinden, t2 JOIN t3 als interpretiert wurde ((T1, T2) t3 JOIN). Jetzt hat JOIN höhere Priorität, so der Ausdruck wird interpretiert als (t1, (t2 JOIN t3))

So zuvor dies als

SELECT *, 
    aks.nazwa as sekcja, 
    ak.nazwa kategoria 
FROM 
    (
     (
      artykuly a, 
      artykuly_kategorie ak0 
     ), 
     artykuly_sekcje aks 
    ) 
    LEFT JOIN artykuly_addons aad ON aad.id_art=a.id_art 
WHERE a.id_art = '20' 
    AND ak.id_sek = aks.id_sek 
    AND a.id_kat = ak.id_kat 

jetzt behandelt wird interpretiert als:

SELECT *, 
    aks.nazwa as sekcja, 
    ak.nazwa kategoria 
FROM 
    (
     (
      artykuly a, 
      artykuly_kategorie ak0 
     ), 
     (artykuly_sekcje aks LEFT JOIN artykuly_addons aad ON aad.id_art=a.id_art) 
    ) 
WHERE a.id_art = '20' 
    AND ak.id_sek = aks.id_sek 
    AND a.id_kat = ak.id_kat