Tengo un problema con una query con joins que me está comiendo. Lo curioso del caso es que la hice en local contra MySQL 4 y funciona bién, pero al pasarla al servidor de producción (MySQL 5) simplemente no devuelve resultados.
La consulta trabaja contra 3 tablas, formando la típica relación N:M (1-N : N-1)
variables
---------
id (pk)
name
var_questions
-------------
id (pk)
id_variable (fk)
id_language (fk)
question
languages
----------
id (pk)
name
Está en tablas MyISAM (es decir, pongo FK pero realmente no hay relaciones establecidas ;) ).
La query que funciona en MySQL 4 y no en MySQL 5 es esta:
Código:
La query debería extraer las variables que tienen var_questions que sean nulos en ciertos lenguages activos, es decir, teniendo una lista de variables y una lista de lenguages activos, necesito info de variables que les falte establecer var_questions en algun lenguage (y en cuál).select variables.name as var_name, variables.id as var_id, var_questions.question as question, languages.name as lang from variables left join var_questions on variables.id = var_questions.id_variable right join languages on var_questions.id_language = languages.id where var_questions.question is null and languages.enabled = 1
Un set de resultados correctos sería algo así:
var_name var_id question lang
var_1 56 null ca
var_2 60 null ca
var_3 65 null ca
Con que tengo que éstas 3 variables les falta la var_question para el lenguage "ca".
Pero la query ejecutada sobre MySQL 5 con una base de datos idéntica me devuelve 0 resultados. Me he dado cuenta que el problema está en acumular muchos joins (tengo otras querys que me pasa lo mismo).
La única forma de conseguir los mismos valores, almenos con los mismos datos, es haciendo una query así:
Código:
Pero no me fío... no conozco muy bién qué hace el cross join y por lógica la primera la encuentro más entendible. Porqué no funciona??select variables.name as var_name, variables.id as var_id, var_questions.question as question, languages.name as lang from languages cross join variables left join var_questions on var_questions.id_language = languages.id where var_questions.question is null and languages.enabled = 1
Alguna pista? MySQL 5 tiene alguna limitación que MySQL 4 no tiene?
Cualquier ayuda será apreciada.