Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/03/2010, 17:36
AlconNegro
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Dudas sobre el uso de restricciones adicionales en la clausula ON del INNER

Buenas gente, deseo consultarles sobre la forma en que estoy obteniendo cierto resultado pues he encontrado 2 formas de hacerlo y si bien una me parece la mas natural, por lo que he leido no es del todo 'correcta' y temo que al llenarse las tablas con datos en algun momento lo que retorne no sea lo que estoy esperando (de ante mano mis disculpas por mi falta de profundidad en mis conocimientos, estoy trabajando para subsanarlo). Llendo al emplo concreto tengo estas 2 tablas:

Código:
CREATE TABLE `it_tickets_prioridades` (
  `idPrioridad` INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `denom` VARCHAR(20) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`idPrioridad`)
)ENGINE=InnoDB
AUTO_INCREMENT=5 CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';
Código:
CREATE TABLE `it_tickets_clasificacionprioridades` (
  `idClasificacionPrioridad` INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idClasificacion` INTEGER(11) UNSIGNED NOT NULL,
  `idPrioridad` INTEGER(11) UNSIGNED NOT NULL,
  PRIMARY KEY (`idClasificacionPrioridad`)
)ENGINE=InnoDB
AUTO_INCREMENT=6 CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';
La idea es tener un conjunto diferente de prioridades para cada clasificación, por lo cual en la pagina donde se asignan siempre necesito la lista de prioridades y que me retorne información para las que si estan disponibles para una clasificación dada (en mis ejemplos sera la de idClasificacion = 1).

Mi solución inical fue entonces:

Código:
SELECT 
  it_tickets_clasificacionprioridades.idClasificacionPrioridad,
  it_tickets_clasificacionprioridades.rev,
  it_tickets_prioridades.idPrioridad,
  it_tickets_prioridades.denom
FROM
  it_tickets_prioridades
  LEFT OUTER JOIN it_tickets_clasificacionprioridades ON
  (
  	it_tickets_prioridades.idPrioridad = it_tickets_clasificacionprioridades.idPrioridad AND
    it_tickets_clasificacionprioridades.idClasificacion = 1
  )
Pero no encontre en ningún lado que recomienden que dentro de la restricción de ON del INNER pueda poner mas condiciones que el campo que se usa como punto de unión; de forma que esta solución (que me parecio mucho mas compleja) parece ser la mas 'correcta':

Código:
SELECT 
  clasifPrior.idClasificacionPrioridad,
  it_tickets_prioridades.idPrioridad,
  it_tickets_prioridades.denom
FROM
  it_tickets_prioridades
  LEFT OUTER JOIN 
  (
  	SELECT 
    	it_tickets_clasificacionprioridades.idPrioridad,
	    it_tickets_clasificacionprioridades.idClasificacionPrioridad 
    FROM it_tickets_clasificacionprioridades
    WHERE 
    	it_tickets_clasificacionprioridades.idClasificacion = 1
  ) AS clasifPrior ON
  (
  	it_tickets_prioridades.idPrioridad = clasifPrior.idPrioridad
  )
Les agradeceria mucho si alguien me puede ayudar a lograr que estoy interpretando mal; espero haber sido lo suficientemente claro al expresar mi duda; desde ya muchas gracias.