En este grupo En todos

Foro de SQL



usar left outer join

Escrito por Mauricio
el 24/10/2007

Estimado amigo, esperando que se encuentre bien, usted es experto en consultas sql, le cuento mi problema:

Tengo esta consulta en un programa de vb6 con conexion access...

Sql = "SELECT TABLA1. REFERENCIA, TABLA1. STOCKF, TABLA2. REFERENCIA1, TABLA2. STOCKF1  FROM TABLA1 LEFT OUTER JOIN TABLA2 ON TABLA1. REFERENCIA = TABLA2. REFERENCIA1"

Muestra todos los datos de tabla1 y tabla2 sin importar que los datos de tabla1 no esten en tabla2, es

Decir tengo mi tabla1 con todos mis datos (productos de supermercado) y en tabla2 que son los productos

De la competencia no estan todos los productos que tengo en mi tabla1, ahora que pasa si quiero ir a

Otro super (tabla3) y comparar los productos ya sean menos? , necesito igual mostrar todos mis productos

De tabla1, los de tabla2, tabla3 y tabla4,  trato hacer otro left outer join con tabla3 on tabla1. Referencia = tabla3. Referencia, pero no resulta...




Ficheros adjuntos:
consulta
Escrito por Mauricio
el 24/10/2007
No he podido hacer la consulta con dos left, a que se puede deber eso, alguien quien me pueda ayudar...
Monica Rivera
Washington, Estados ...
Escrito por Monica Rivera
el 24/10/2007

Mauricio,


Puedes mandar la consulta que escribiste que incluyen las otras tablas?


Gracias,


Monica

Escrito por Mauricio
el 24/10/2007

Hola, muchas gracias, la ide es tener todos mis productos mostrando todos los datos de la tabla1 aunque no esten en el resto de las tablas

TABLA1

1,2,3,4,5

TABLA2

1,2,5

TABLA3

1,3,4

QUE MUESTRE

T1 T2 T3

 1   1  1

2    2

3         3

4         4

5          5

Sql = "SELECT TABLA1. REFERENCIA,  TABLA1. NOMBRE, TABLA1. ESPECIAL, TABLA1. COSTO, TABLA1. PRECIO, TABLA2. PRECIO1, TABLA3. PRECIO2 FROM TABLA1 LEFT OUTER JOIN TABLA2 ON TABLA1. REFERENCIA = TABLA2. REFERENCIA LEFT OUTER JOIN TABLA3 ON TABLA1. REFERENCIA = TABLA3. REFERENCIA"

NOTA: Uso uso access en un programa con VB6

Escrito por Mauricio
el 24/10/2007

Debo aclarar que estoy ocupando algunos nombres de objetos para hacer referencia a la consulta, ya que no es estacia por ej

Sql = " SELECT "  & label1. Caption &  . REFERENCIA.... " "

Monica Rivera
Washington, Estados ...
Escrito por Monica Rivera
el 24/10/2007

Primero te aconsejo que escribas la sentencia directamente en Access y la ejecutes para comprobar que tu sintaxis es correcta. Revisando la sentencia que mandas, todo parece estar bien, pero aun asi, compruebalo antes de mandarla desde la aplicacion.

Segundo, es posible que en lugar de ejecutar la sentencia generada por la aplicacion, imprimas la sentencia en la pantalla para comprobar que esta construida correctamente?

Por ultimo, es un riesgo bien grande que construyas tus sentencias SQL a partir del input de los usuarios, ya que estos podrian ingresar cadenas que generen sentencias que dañen tu base de datos.


Saludos,


Monica

Escrito por Mauricio
el 24/10/2007
GRACIAS, voy a ver que sucede y despues coloco el tema, lo que sucede son tablas que se ocupan solo una vez y se destruyen, ya que las genero para luego exportarlas a una planilla excel...
Monica Rivera
Washington, Estados ...
Escrito por Monica Rivera
el 24/10/2007

En ese caso te recomendaria que vayas al foro de Access y obtengas informacion acerca de otras posibles soluciones. Tienen que haber opciones mas seguras, pero desafortunadamente, no soy experta en Access y no puedo recomendarte nada en ese terreno.


Buena suerte.


Monica

Snob
Venezuela
Escrito por Snob
el 18/11/2007

Entiendo q tienes como referencia los productos de la tabla1, por lo tanto:

SELECT T1. CodProd, T1. Descrip, T1. Precio1, isnull(T2. Precio,0) as Precio2, isnull(T3. Precio,0) as Precio3, isnull(T4. Precio,0) as Precio4
FROM dbo. Tabla1 as T1
LEFT JOIN dbo. Tabla2 as T2
ON T1. CodProd=T2. CodProd
LEFT JOIN dbo. Tabla3 as T3
ON T1. CodProd=T3. CodProd
LEFT JOIN dbo. Tabla4 as T4
ON T1. CodProd=T4. CodProd

Por q usamos ISNULL? Porq si el registro en la tabla2 no existe, el valor q devolvera la consulta para cualquier campo de la tabla2 será NULL, por lo tanto si quisieramos listar unicamente los productos que NO existen en la tabla2, agregariamos a la consulta anterior lo siguiente:

WHERE T2. CodProd IS NULL

Si quisieramos listar los productos q existen en todas las tablas

WHERE T2. CodProd IS NOT NULL AND T3CodProd IS NOT NULL AND T4CodProd IS NOT NULL

Salu2