Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2008, 04:02
dracco
 
Fecha de Ingreso: octubre-2007
Mensajes: 5
Antigüedad: 16 años, 6 meses
Puntos: 0
Pregunta Problema de compatibilidad JOINS MySQL4 - MySQL5?

Buenas...

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

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:
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
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??

Alguna pista? MySQL 5 tiene alguna limitación que MySQL 4 no tiene?

Cualquier ayuda será apreciada.