Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/09/2010, 15:47
Seifus
 
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.