MySQL JOIN запрос работал в версии 4, сломанной в 5 - PullRequest
0 голосов
/ 15 декабря 2010

Я унаследовал веб-сайт, созданный кем-то еще, используя MySQL 4 в качестве базы данных, и пытаюсь переключиться на новый сервер с MySQL 5. Я скопировал все файлы и выгрузил базу данных из MySQL версии 4, а затем импортировал обратно в версия 5.

Теперь половина веб-сайта работает, а другая - нет. Я продолжаю получать следующее:

Неизвестный столбец 'a.id_art' в 'предложении'

Вот мой запрос:

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

Почему вышеупомянутое прекрасно работает в MySQL версии 4, но не работает в версии 5?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2011

Вероятно, проблема заключается в комбинации LEFT JOIN и соединения с запятыми и фильтрации в предложении WHERE. Попробуйте это:

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 голосов
/ 12 сентября 2011

Приоритет запятой теперь ниже, чем явные операторы JOIN.Цитирование MySQL 5.0 Синтаксическая страница JOIN :

Ранее оператор запятой (,) и JOIN имели одинаковый приоритет, поэтому выражение соединения t1, t2 JOIN t3 интерпретировалосьas ((t1, t2) JOIN t3).Теперь JOIN имеет более высокий приоритет, поэтому выражение интерпретируется как (t1, (t2 JOIN t3))

Итак, ранее это воспринималось как

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

Теперь оно интерпретируется как:

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
...