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

Duda con left join

Estas en el tema de Duda con left join en el foro de SQL Server en Foros del Web. Hola: Tengo dos tablas relacionadas, en una tengo productos y en la otra un registro por cada lenguaje en que se haya ingresado ese producto. ...
  #1 (permalink)  
Antiguo 09/09/2011, 11:18
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años, 6 meses
Puntos: 2
Duda con left join

Hola:

Tengo dos tablas relacionadas, en una tengo productos y en la otra un registro por cada lenguaje en que se haya ingresado ese producto.
lo que necesito hacer es una consulta que me traiga los datos de producto y los datos de lenguaje, pero que si no tiene lenguaje me traiga datos de producto y el resto vacío.
Traté de hacerlo de esta manera, haciendo uso de left join peroimamente me trae un set de datos vacío.
Cómo debería ser la consulta?



SELECT dbo.Producto.IdProducto,
dbo.Producto.Codigo,
dbo.Producto.IdFamilia,
dbo.Producto.StockCritico,
dbo.Producto.Stock,
dbo.Producto.Precio,
dbo.ProductoLocalizacion.lenguaje,
dbo.ProductoLocalizacion.nombre,
dbo.ProductoLocalizacion.Descripcion

FROM dbo.Producto left JOIN dbo.ProductoLocalizacion
ON
dbo.ProductoLocalizacion.idProducto = dbo.Producto.IdProducto
where producto.idProducto=1 and ProductoLocalizacion.lenguaje = 'es-AR'


si es-AR existe lista el registro, pero si no existe no lo muestra, acá quisiera que muestre los datos vacios de lenguaje.


Muchas gracias desde ya.
  #2 (permalink)  
Antiguo 09/09/2011, 12:05
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Duda con left join

¿Si lo cambias por un RIGHT JOIN?, Lo probaste.......
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 09/09/2011, 12:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Duda con left join

Hola moron:

Creo que el problema está en que estás poniendo la condición ProductoLocalizacion.lenguaje = 'es-AR' en el WHERE, sin embargo esta se aplica DESPUÉS DE HACER EL LEFT JOIN, por lo tanto estás obligando a que exista información en la tabla ProductoLocalizacion para poder mostrar la información, en otras palabras, estás haciendo un INNER JOIN, a reserva de que pruebas la opción de Iislas y funcione puedes intentar hacer esto:

Código SQL:
Ver original
  1. SELECT   
  2. dbo.Producto.IdProducto,
  3. dbo.Producto.Codigo,
  4. dbo.Producto.IdFamilia,
  5. dbo.Producto.StockCritico,
  6. dbo.Producto.Stock,
  7. dbo.Producto.Precio,
  8. dbo.ProductoLocalizacion.lenguaje,
  9. dbo.ProductoLocalizacion.nombre,
  10. dbo.ProductoLocalizacion.Descripcion
  11. FROM dbo.Producto LEFT JOIN dbo.ProductoLocalizacion
  12. ON
  13. dbo.ProductoLocalizacion.idProducto = dbo.Producto.IdProducto
  14. AND ProductoLocalizacion.lenguaje = 'es-AR'
  15. WHERE producto.idProducto=1

O también podrías hacer la condición así:

Código SQL:
Ver original
  1. SELECT   
  2. dbo.Producto.IdProducto,
  3. dbo.Producto.Codigo,
  4. dbo.Producto.IdFamilia,
  5. dbo.Producto.StockCritico,
  6. dbo.Producto.Stock,
  7. dbo.Producto.Precio,
  8. dbo.ProductoLocalizacion.lenguaje,
  9. dbo.ProductoLocalizacion.nombre,
  10. dbo.ProductoLocalizacion.Descripcion
  11. FROM dbo.Producto LEFT JOIN dbo.ProductoLocalizacion
  12. ON
  13. dbo.ProductoLocalizacion.idProducto = dbo.Producto.IdProducto
  14. WHERE producto.idProducto=1
  15. AND (ProductoLocalizacion.lenguaje = 'es-AR' OR ProductoLocalizacion.lenguaje IS NULL)

haz la prueba y nos comentas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 12/09/2011, 07:04
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: Duda con left join

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola moron:

Creo que el problema está en que estás poniendo la condición ProductoLocalizacion.lenguaje = 'es-AR' en el WHERE, sin embargo esta se aplica DESPUÉS DE HACER EL LEFT JOIN, por lo tanto estás obligando a que exista información en la tabla ProductoLocalizacion para poder mostrar la información, en otras palabras, estás haciendo un INNER JOIN, a reserva de que pruebas la opción de Iislas y funcione puedes intentar hacer esto:

Código SQL:
Ver original
  1. SELECT   
  2. dbo.Producto.IdProducto,
  3. dbo.Producto.Codigo,
  4. dbo.Producto.IdFamilia,
  5. dbo.Producto.StockCritico,
  6. dbo.Producto.Stock,
  7. dbo.Producto.Precio,
  8. dbo.ProductoLocalizacion.lenguaje,
  9. dbo.ProductoLocalizacion.nombre,
  10. dbo.ProductoLocalizacion.Descripcion
  11. FROM dbo.Producto LEFT JOIN dbo.ProductoLocalizacion
  12. ON
  13. dbo.ProductoLocalizacion.idProducto = dbo.Producto.IdProducto
  14. AND ProductoLocalizacion.lenguaje = 'es-AR'
  15. WHERE producto.idProducto=1

O también podrías hacer la condición así:

Código SQL:
Ver original
  1. SELECT   
  2. dbo.Producto.IdProducto,
  3. dbo.Producto.Codigo,
  4. dbo.Producto.IdFamilia,
  5. dbo.Producto.StockCritico,
  6. dbo.Producto.Stock,
  7. dbo.Producto.Precio,
  8. dbo.ProductoLocalizacion.lenguaje,
  9. dbo.ProductoLocalizacion.nombre,
  10. dbo.ProductoLocalizacion.Descripcion
  11. FROM dbo.Producto LEFT JOIN dbo.ProductoLocalizacion
  12. ON
  13. dbo.ProductoLocalizacion.idProducto = dbo.Producto.IdProducto
  14. WHERE producto.idProducto=1
  15. AND (ProductoLocalizacion.lenguaje = 'es-AR' OR ProductoLocalizacion.lenguaje IS NULL)

haz la prueba y nos comentas.

Saludos
Leo.
ahi vá. Muchas gracias

Etiquetas: join, left, select, tabla
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 22:15.