Discussion:
Left Join con 4 tablas
(demasiado antiguo para responder)
Gonzalo García
2010-03-07 17:23:01 UTC
Permalink
Buenas, tengo que hacer una consulta en SQL en una aplicacion de visual
basic, Tengo una tabla Articulos que relaciona con 4 mas ArtPrecio1,
ArtPrecio2, ArtPrecio3, ArtPrecio4, todas a través del campo CodigoArticulo.
Quería saber si se pueden hacer un LEFT JOIN con las 4 tablas. Probé esto
pero no me da resultado;

strSQL = "SELECT Articulos.CodigoArticulo , ArtPrecio1.*, ArtPrecio2.*,
ArtPrecio3.*, ArtPrecio4.* FROM Articulos LEFT JOIN ArtPrecio1 ON
Articulos.CodigoArticulo = ArtPrecio1.CodigoArticulo LEFT JOIN ArtPrecio2 ON
Articulos.CodigoArticulo = ArtPrecio2.CodigoArticulo LEFT JOIN ArtPrecio3 ON
Articulos.CodigoArticulo = ArtPrecio3.CodigoArticulo LEFT JOIN ArtPrecio4 ON
Articulos.CodigoArticulo = ArtPrecio4.CodigoArticulo WHERE
Articulos.CodigoArticulo = 15"

Desde ya muchas gracias!

Gonzalo
Sonia
2010-03-07 19:16:02 UTC
Permalink
Hola Gonzalo!
Prueba con esto

strSQL = "SELECT Articulos.CodigoArticulo , ArtPrecio1.*, " & _
"ArtPrecio2.*,ArtPrecio3.*, ArtPrecio4.* " & _
"FROM ((((Articulos LEFT JOIN ArtPrecio1 ON " & _
"Articulos.CodigoArticulo = ArtPrecio1.CodigoArticulo) " & _
"LEFT JOIN ArtPrecio2 ON " & _
"Articulos.CodigoArticulo = ArtPrecio2.CodigoArticulo) " & _
"LEFT JOIN ArtPrecio3 ON " & _
"Articulos.CodigoArticulo = ArtPrecio3.CodigoArticulo) " & _
"LEFT JOIN ArtPrecio4 ON " & _
"Articulos.CodigoArticulo = ArtPrecio4.CodigoArticulo) " & _
"WHERE Articulos.CodigoArticulo = 15"

Así lo utilizo con tablas de Access. Recuerda es un paréntesis por cada JOIN
despues del from y
vas cerrando los paréntesis luego de cada JOIN
ejemplo...
...FROM ((tablaA LEFT JOIN tabla1 ON...) LEFT JOIN tabla2 ON...)
WHERE...

Espero te sirva
--
Saludos!
desde Buenos Aires, Argentina
Sonia
Post by Gonzalo García
Buenas, tengo que hacer una consulta en SQL en una aplicacion de visual
basic, Tengo una tabla Articulos que relaciona con 4 mas ArtPrecio1,
ArtPrecio2, ArtPrecio3, ArtPrecio4, todas a través del campo
CodigoArticulo.
Quería saber si se pueden hacer un LEFT JOIN con las 4 tablas. Probé esto
pero no me da resultado;
strSQL = "SELECT Articulos.CodigoArticulo , ArtPrecio1.*, ArtPrecio2.*,
ArtPrecio3.*, ArtPrecio4.* FROM Articulos LEFT JOIN ArtPrecio1 ON
Articulos.CodigoArticulo = ArtPrecio1.CodigoArticulo LEFT JOIN ArtPrecio2 ON
Articulos.CodigoArticulo = ArtPrecio2.CodigoArticulo LEFT JOIN ArtPrecio3 ON
Articulos.CodigoArticulo = ArtPrecio3.CodigoArticulo LEFT JOIN ArtPrecio4 ON
Articulos.CodigoArticulo = ArtPrecio4.CodigoArticulo WHERE
Articulos.CodigoArticulo = 15"
Desde ya muchas gracias!
Gonzalo
unknown
2010-03-07 19:18:16 UTC
Permalink
Post by Gonzalo García
Buenas, tengo que hacer una consulta en SQL en una aplicacion de visual
basic, Tengo una tabla Articulos que relaciona con 4 mas ArtPrecio1,
ArtPrecio2, ArtPrecio3, ArtPrecio4, todas a través del campo
CodigoArticulo.
Quería saber si se pueden hacer un LEFT JOIN con las 4 tablas. Probé esto
pero no me da resultado;
strSQL = "SELECT Articulos.CodigoArticulo , ArtPrecio1.*, ArtPrecio2.*,
ArtPrecio3.*, ArtPrecio4.* FROM Articulos LEFT JOIN ArtPrecio1 ON
Articulos.CodigoArticulo = ArtPrecio1.CodigoArticulo LEFT JOIN ArtPrecio2 ON
Articulos.CodigoArticulo = ArtPrecio2.CodigoArticulo LEFT JOIN ArtPrecio3 ON
Articulos.CodigoArticulo = ArtPrecio3.CodigoArticulo LEFT JOIN ArtPrecio4 ON
Articulos.CodigoArticulo = ArtPrecio4.CodigoArticulo WHERE
Articulos.CodigoArticulo = 15"
Desde ya muchas gracias!
Gonzalo
Hola,

A pesar de haber reseteado la suscripción, etcétera, no me aparece una
respuesta que envié hace un buen rato.

Pido excusas si se repite:

-------------------------------------------------------------------------------

En SQL Server debería funcionar tal como la tienes:

SELECT Articulos.Codigo, Articulos.Descripcion,
Precio1.Precio AS Precio1, Precio2.Precio AS Precio2, Precio3.Precio AS
Precio3,
Precio4.Precio AS Precio4
FROM Articulos
LEFT JOIN Precio1 ON Articulos.Codigo = Precio1.Codigo
LEFT JOIN Precio2 ON Articulos.Codigo = Precio2.Codigo
LEFT JOIN Precio3 ON Articulos.Codigo = Precio3.Codigo
LEFT JOIN Precio4 ON Articulos.Codigo = Precio4.Codigo

En Access es un poco más complicado, porque exige el uso de paréntesis:

SELECT Articulos.Codigo, Articulos.Descripcion,
Precio1.Precio As Precio1, Precio2.Precio As Precio2, Precio3.Precio As
Precio3 ,
Precio4.Precio As Precio4
FROM (((Articulos LEFT JOIN Precio1 ON Articulos.Codigo = Precio1.Codigo)
LEFT JOIN Precio2 ON Articulos.Codigo = Precio2.Codigo)
LEFT JOIN Precio3 ON Articulos.Codigo = Precio3.Codigo)
LEFT JOIN Precio4 ON Articulos.Codigo = Precio4.Codigo;

Pero si consideras que el número de precios es conocido de antemano, que la
necesidad de usar LEFT JOINs se deriva del hecho de que podrían no existir
valores para uno de los precios, causando la aparición de NULLs en algunas
columnas de resultado y que CERO es un valor perfectamente apto para indicar
la ausencia de un precio, llegarás a la conclusión de que puede tener
sentido agregar las columnas Precio1 a Precio4 en la tabla artículos con un
valor por omisión de CERO.

El ahorro en índices, relaciones y tiempo de proceso justifica de sobra el
espacio desperdiciado cuando un precio no esté definido.

A menos que haya alguna consideración adicional, sería mejor tenerlo todo en
una misma tabla.


Salud!
langosta
2010-03-07 20:12:14 UTC
Permalink
"Leonardo Azpurua" <l e o n a r d o (arroba) e x m v p s (punto) o r g>
Post by Gonzalo García
Buenas, tengo que hacer una consulta en SQL en una aplicacion de visual
basic, Tengo una tabla Articulos que relaciona con 4 mas ArtPrecio1,
ArtPrecio2, ArtPrecio3, ArtPrecio4, todas a través del campo
CodigoArticulo.
Quería saber si se pueden hacer un LEFT JOIN con las 4 tablas. Probé esto
pero no me da resultado;
strSQL = "SELECT Articulos.CodigoArticulo , ArtPrecio1.*,
ArtPrecio2.*,
ArtPrecio3.*, ArtPrecio4.* FROM Articulos LEFT JOIN ArtPrecio1 ON
Articulos.CodigoArticulo = ArtPrecio1.CodigoArticulo LEFT JOIN
ArtPrecio2 ON
Articulos.CodigoArticulo = ArtPrecio2.CodigoArticulo LEFT JOIN
ArtPrecio3 ON
Articulos.CodigoArticulo = ArtPrecio3.CodigoArticulo LEFT JOIN
ArtPrecio4 ON
Articulos.CodigoArticulo = ArtPrecio4.CodigoArticulo WHERE
Articulos.CodigoArticulo = 15"
Desde ya muchas gracias!
Gonzalo
Hola,

A pesar de haber reseteado la suscripción, etcétera, no me aparece una
respuesta que envié hace un buen rato.

Pido excusas si se repite:

-------------------------------------------------------------------------------

En SQL Server debería funcionar tal como la tienes:

SELECT Articulos.Codigo, Articulos.Descripcion,
Precio1.Precio AS Precio1, Precio2.Precio AS Precio2,
Precio3.Precio AS
Precio3,
Precio4.Precio AS Precio4
FROM Articulos
LEFT JOIN Precio1 ON Articulos.Codigo = Precio1.Codigo
LEFT JOIN Precio2 ON Articulos.Codigo = Precio2.Codigo
LEFT JOIN Precio3 ON Articulos.Codigo = Precio3.Codigo
LEFT JOIN Precio4 ON Articulos.Codigo = Precio4.Codigo

En Access es un poco más complicado, porque exige el uso de paréntesis:

SELECT Articulos.Codigo, Articulos.Descripcion,
Precio1.Precio As Precio1, Precio2.Precio As Precio2, Precio3.Precio
As
Precio3 ,
Precio4.Precio As Precio4
FROM (((Articulos LEFT JOIN Precio1 ON Articulos.Codigo =
Precio1.Codigo)
LEFT JOIN Precio2 ON Articulos.Codigo = Precio2.Codigo)
LEFT JOIN Precio3 ON Articulos.Codigo = Precio3.Codigo)
LEFT JOIN Precio4 ON Articulos.Codigo = Precio4.Codigo;

Pero si consideras que el número de precios es conocido de antemano, que
la
necesidad de usar LEFT JOINs se deriva del hecho de que podrían no
existir
valores para uno de los precios, causando la aparición de NULLs en
algunas
columnas de resultado y que CERO es un valor perfectamente apto para
indicar
la ausencia de un precio, llegarás a la conclusión de que puede tener
sentido agregar las columnas Precio1 a Precio4 en la tabla artículos con
un
valor por omisión de CERO.

El ahorro en índices, relaciones y tiempo de proceso justifica de sobra
el
espacio desperdiciado cuando un precio no esté definido.

A menos que haya alguna consideración adicional, sería mejor tenerlo
todo en
una misma tabla.


Salud!

Continúe leyendo en narkive:
Loading...