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.