Problemas con Left Join

12/01/2010 - 21:13 por Diego | Informe spam
Buenas Tardes.
Tengo un problema que segun la teoria estoy haciendo lo correcto, pero en la
practica no me muestra los resultados deseados.
Tengo 2 Tablas (Destinos y Tarifas)
les paso las descripciones de ambas
Tabla Destinos Tabla Tarifas
NroDestino NroTarifa
DescripcionDestino Destino
importe

lo que quiero saber es si se cargaron las tarifas para todos los destinos,
entonces hago lo siguiente

select
destinos.NroDestino,destinos.DescripcionDestino,tarifas.NroTarifa,tarifas.importe
from destinos
left join tarifas on destinos.NroDestino=tarifas.Destino

Si no estoy haciendo algo mal, con esta instruccion deberia traerme todos
los Nros de tarifa y destinos en los cuales no se le carga nada, y en caso
mostrarme NULL, pero no lo hace, esta instruccion me esta funcionando como
in inner join.

Tengo algo mal en la instruccion?

Gracias de antemano.
Diego.




__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 4765 (20100112) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
12/01/2010 - 22:20 | Informe spam
Diego,

Mostrar la cita
O sea, que deseas ver si existe algun destino sin tarifa.

select
destinos.NroDestino,
destinos.DescripcionDestino,
tarifas.NroTarifa,
tarifas.importe
from
destinos
left join
tarifas on destinos.NroDestino=tarifas.Destino
where
tarifas.Destino IS NULL;

Tambien puedes usar el operador EXISTS.

select
destinos.NroDestino,
destinos.DescripcionDestino
from
destinos as d
where
not exists (
select *
from tarifas as t
where t.Destino = d.NroDestino
);


AMB




"Diego" wrote:

Mostrar la cita
#2 Alejandro Mesa
12/01/2010 - 22:22 | Informe spam
En la sentencia que usa el operador EXISTS debemos usar el alias correcto en
la lista de columnas.

select
d.NroDestino,
d.DescripcionDestino
from
destinos as d
where
not exists (
select *
from tarifas as t
where t.Destino = d.NroDestino
);


AMB


"Alejandro Mesa" wrote:

Mostrar la cita
#3 Alejandro Mesa
13/01/2010 - 15:09 | Informe spam
Alberto Daniel,

Mostrar la cita
Ningun efecto. Los join Left, Right, y Full son todos outer, y no es
necesario escribirlo en la sentencia. Se dan por hecho que son outer cuando
se usan.

Estas dos sentencias son iguales.

select * from A left join B on A.c1 = B.c1
select * from A left outer join B on A.c1 = B.c1


AMB


"Alberto Daniel" wrote:

Mostrar la cita
#4 Alejandro Mesa
13/01/2010 - 17:31 | Informe spam
Alberto Daniel,

Mostrar la cita
Ningun efecto, pues la palabra "outer" es opcional cuando se usan outer
joins como son Left, right, y Full.

estas dos sentencias returnoran el mismo resultado.

select * from A left join B on A.c1 = B.c1
select * from A left outer join B on A.c1 = B.c1


AMB



"Alberto Daniel" wrote:

Mostrar la cita
#5 Diego
15/01/2010 - 16:35 | Informe spam
Hola Alejandro, disculpa en la demora por responderte.
El problema que tengo es que se cargaron los destinos, luego se ingresaron
las tarifas, pero a medida que se va trabajando comienzan a cargar nuevos
destinos.
Mi problema es que para cargar y mostrar las tarifas cargadas utilizo en
Visual Basic 6 una grilla, lo que quiero hacer es que cuando pidan la tarifa
cargada, les muestre todos los destinos con sus respectivas tarifas, e
incluso los nuevos destinos cargados pero con el casillero correspondiente
en blanco para que el usuario sepa que es lo que tiene que cargar.
Te doy un ejemplo:

Tabla Destinos

NroDestino DescDestino
1 Montevideo
2 Rio de Janeiro
3 Santiago de chile
Tabla Tarifas
NroTarifa Destino Importe
1 1 10
1 2 20
1 3 30

Cuando llaman a la tarifa 1 en pantalla muestro lo siguiente
Montevideo 10
Rio de Janeiro 20
Santiago de Chile 30

El problema mio es que cargan un nuevo destino por ejempo Barranquilla y yo
quiero que cuando pidan la tarifa muestre lo suiguente
Montevideo 10
Rio de Janeiro 20
Santiago de Chile 30
Barranquilla Este obviamente sin valor

Por mis conocimientos de sql con la instruccion select con left join que
mencione me lo deberia mostrar, pero no lo hace.
Tendre mal la instruccion?

Gracias por todo.

"Alejandro Mesa" escribió en el
mensaje news:
Mostrar la cita
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 4772 (20100114) __________

ESET NOD32 Antivirus ha comprobado este mensaje.

http://www.eset.com
Ads by Google
Search Busqueda sugerida