Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta de tablas relacionadas

Estas en el tema de Consulta de tablas relacionadas en el foro de Mysql en Foros del Web. Hola a todos. Este problema me esta volviendo loco, tengo las siguientes tablas: Tabla: tarifas (define las tarifas de carga) codigo - itinerario - descripcion ...
  #1 (permalink)  
Antiguo 02/09/2010, 15:47
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Consulta de tablas relacionadas

Hola a todos.

Este problema me esta volviendo loco, tengo las siguientes tablas:

Tabla: tarifas (define las tarifas de carga)
codigo - itinerario - descripcion - valor
1 1 Kilogramo 1500
2 2 Kilogramo 1600
3 1 Paquete 500
4 2 Paquete 500
5 1 Volumen 10000
6 2 Volumen 10000

Tabla: empaques (define los tipos de empaques)
codigo - empaque
1 Sobre
2 Paquete
3 Caja
4 Otro

Tabla: empaque_tarifas (relaciona los empaques con las tarifas)
cod_empaque - cod_tarifa
1 3
1 4

Y tengo la siguiente SQL que se supone debería motrar TODOS los registros de la tabla tarifas y el codigo de empaque (cod_empaque) cuando corresponda:

SELECT codigo, itinerario, descripcion, valor, COALESCE(cod_empaque,0) as cod_empaque FROM tarifas LEFT JOIN empaque_tarifas ON tarifas.codigo=empaque_tarifas.cod_tarifa WHERE COALESCE(cod_empaque,0)=0 or cod_empaque=1

Y funciona perfectamente cuando solicito consultar un "cod_empaque" que existe en la tabla empaque_tarifa, como es el caso del "1", pero al cambiarlo por uno que no esté registrado, me muestra todos menos los registros de tarifas 3 y 4.

Ejemplo con criterio cod_empaque=1: (que es correcto)
codigo - itinerario - descripcion - valor - cod_empaque
1 1 Kilogramo 1500 0
2 2 Kilogramo 1600 0
3 1 Paquete 500 1
4 2 Paquete 500 1
5 1 Volumen 10000 0
6 2 Volumen 10000 0

Ejemplo con criterio cod_empaque=2: (incorrecto)
codigo - itinerario - descripcion - valor - cod_empaque
1 1 Kilogramo 1500 0
2 2 Kilogramo 1600 0
5 1 Volumen 10000 0
6 2 Volumen 10000 0

Lo que deberia mostrar es:
codigo - itinerario - descripcion - valor - cod_empaque
1 1 Kilogramo 1500 0
2 2 Kilogramo 1600 0
3 1 Paquete 500 0
4 2 Paquete 500 0
5 1 Volumen 10000 0
6 2 Volumen 10000 0

Les agradecería mucho si me pudieran ayudar, de antemano muchas gracias.
  #2 (permalink)  
Antiguo 03/09/2010, 16:25
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: Consulta de tablas relacionadas

La solucion que encontre, no si es tan ortodoxa, pero sirve:

SELECT r.codigo,r.itinerario, r.descripcion, r.valor, Max(r.cod_empaque) AS cod_empaque
FROM (SELECT codigo, itinerario, descripcion, valor, 0 as cod_empaque FROM tarifas UNION SELECT t.codigo, t.itinerario, t.descripcion, t.valor, r.cod_empaque FROM (tarifas AS t INNER JOIN empaque_tarifas AS r ON t.codigo=r.cod_tarifa) WHERE cod_empaque=1 ORDER BY codigo) AS r GROUP BY r.codigo, r.itinerario, r.descripcion, r.valor;

Gracias de todas formas.

Etiquetas: relacionadas, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:28.