Por que consigo executar uma determinada query no MySQL 4, mas não consigo executá-la no MySQL 5?

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:

    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%'   )   )

    Qualquer dúvida em relação ao assunto, entre em contato conosco através do Atendimento

    Veja também