Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/02/2012, 17:13
MikiBroki
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años, 1 mes
Puntos: 8
Problema combinando tablas

Hola buenas,

Hasta un poco de vergüenza me da preguntar lo siguiente, porque aunque no soy ningún maestro sí que llevo años utilizando MySQL y otras bases de datos y hasta ahora no me había surgido nada así...

La siguiente combinación da el resultado mostrado en la imagen bajo ella (muestra todos los registros bien relacionados):

Código:
select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia
from personas per, provincias pro
where
(
	(per.idprovincia = pro.idprovincia) 
);


Pero la siguiente sentencia falla (deberían realizarse las condiciones sobre los datos resultantes de la combinación):

Código:
select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia
from personas per, provincias pro
where
(
	(per.idprovincia = pro.idprovincia)  AND
	(pro.provincia = 'LAS PALMAS') OR 
	(pro.idprovincia = 5)	
);


Sin embargo, del siguiente modo va perfecta (agrupando las condiciones entre paréntesis):

Código:
select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia
from personas per, provincias pro
where
(
	(per.idprovincia = pro.idprovincia)  AND
	( (pro.provincia = 'LAS PALMAS') OR (pro.idprovincia=5) )	
);


No termino de entender el por qué, nunca me había encontrado con algo así, incluso por si estaba confundido he vuelto a repasar ejercicios de hace años en que lo estudié... y están igual que lo indicado en el primer modo (sin necesidad de agrupar las condiciones tras la combinación).

Conozco los JOIN aunque por costumbre no los uso. La siguiente sentencia funciona bien:

Código:
select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia
from personas per INNER JOIN provincias pro ON (per.idprovincia = pro.idprovincia)
where
(
	(pro.provincia = 'LAS PALMAS') OR 
	(pro.idprovincia = 5)	
);
Las tablas son InnoDB con sus claves foráneas y demás.

Agradecería mucho una explicación dado que por más vueltas que le doy y por más material que repaso no doy con la solución.

PD: creo que me hago viejo

Última edición por MikiBroki; 29/02/2012 a las 18:28