Por que consigo executar uma determinada query no MySQL 4, mas não consigo executá-la no MySQL 5? 2015-03-26 10:31 | Modos de exibição: 719

O MySQL 5 está mais rígido quanto à leitura de queries. Por este motivo uma query que não esteja totalmente estruturada pode apresentar algum erro, o que não ocorre no MySQL 4, pois esta versão possui um tipo diferente de análise.

Vamos supor que você esteja executando a query abaixo:

SELECT count( DISTINCT p.products_id ) AS total
FROM products p
LEFT JOIN manufacturers m
USING ( manufacturers_id ) , products_description pd
LEFT JOIN specials s ON p.products_id = s.products_id, categories c, products_to_categories p2c
WHERE p.products_status = '1'
AND p.products_id = pd.products_id
AND pd.language_id = '4'
AND p.products_id = p2c.products_id
AND p2c.categories_id = c.categories_id
AND (
(
pd.products_name LIKE '%dvd%'
OR p.products_model LIKE '%dvd%'
OR m.manufacturers_name LIKE '%dvd%'
)
)

Ela seria executada normalmente no MySQL 4, porém, ao executá-la no MySQL 5 ocorre o seguinte erro:

1054 - Unknown column 'p.products_id' in ’on clause'

Para solucionar este problema é necessário realizar uma pequena mudança na estrutura da query removendo as tabelas existentes entre os JOIN’s e colocando-as logo após, deixando a query com uma estrutura mais lógica como mostra abaixo:

SELECT count( DISTINCT p.products_id ) AS total
FROM products p
LEFT JOIN manufacturers m USING ( manufacturers_id )
LEFT JOIN specials s ON (s.products_id = p.products_id),
products_description pd, categories c, products_to_categories p2c
WHERE p.products_status = '1'
AND p.products_id = pd.products_id
AND pd.language_id = '4'
AND p.products_id = p2c.products_id
AND p2c.categories_id = c.categories_id
AND (
(
pd.products_name LIKE '%dvd%'
OR p.products_model LIKE '%dvd%'
OR m.manufacturers_name LIKE '%dvd%'
)
)


O que você está procurando?