Ayuda Con Consulta SQL


Objetivo: Ayuda Con Consulta SQL
Hola, estoy leyendo bastante sobre SQL para aprender a manejar cada vez mejor las consultas y así estoy realizando de a poco filtrados cada vez mas complejos, al menos para mi
Estoy haciendo pruebas con DISTINCT, GROUP BY, etc para ir comprendiendo como funciona cada uno y así ir sacándoles provecho. Es realmente muy interesante.
Ahora estoy trabado con una consulta que me gustaría hacer pero no se que debería usar.

Tengo 2 tablas "Compras" y "Ventas"
Compras tiene los campos Fecha, Tipo, Autor, Titulo, etc (solo necesito esos 4)
Ventas tiene los campos Fecha, Autor, Titulo, etc (solo estos 3)

Ambas tienen además campos que no coinciden entre ellas pero no me interesan en absoluto para esta consulta.
Mi idea es mostrar una Gridview con los campos (Fecha, Autor, Titulo FROM Ventas WHERE Titulo='XXX') y con (Fecha,Tipo,Autor,Titulo FROM Compras WHERE Titulo='XXX')
En ambos casos XXX es el mismo valor
Por lo que vengo leyendo lo mas parecido que encuentro seria el "UNION ALL" cosa que no se si se podría emplear porque según entiendo ¿la estructura de ambas tablas debería ser igual?
Por donde podría empezar a estudiar, estoy leyendo todo lo que encuentro.
Otra que se me ocurre, sería crearle un campo "Tipo" a la tabla Ventas y aunque este valor este siempre vacío seria para emparejar los campos de la vista que pretendo hacer.
Espero que se entienda mi consulta, no estoy esperando ni siquiera que lo "hagan por mi" sino alguna orientación de para que lado agarrar, jajaja.

Desde ya muchas gracias y disculpen la molestia.

Marcelo

Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
La respuesta es JOIN.

Prueba esto:

Select tabla1.Fecha, tabla1.Tipo, tabla1.Autor, tabla1.Titulo,tabla2.Fecha, tabla2.Tipo, tabla2.Autor, tabla2.Titulo from tabla1 join tabla2 on tabla1.xxx = tabla2.xxx order by Fecha


Suerte

Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
Gracias Shordi!
Estuve probando pero no tuve éxito con el JOIN.
Pero creo que lo resolví utilizando UNION ALL, de esta manera hago un Select simple tras otro.
Tal ves no fui claro en la pregunta pero esto era lo que necesitaba.
El JOIN me daba la cantidad de registros correctos pero me mostraba los valores de una sola de las tablas, de esta manera es como anidar las dos consultas imples una tras otra...
El código me quedó así, por si a alguien ayuda en futuro.

Tabla = Conexion.Exec("SELECT Fecha,Tipo,Numero,Accion,Autor,Titulo FROM Compras WHERE Autor='XX' UNION ALL SELECT Fecha,Tipo,Numero,Accion,Autor,Titulo FROM Ventas WHERE Autor='XX'")


Muchas gracias

Marcelo

Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
Citar:
El JOIN me daba la cantidad de registros correctos pero me mostraba los valores de una sola de las tablas,

Eso me indica que no pusiste los nombres de las tablas en los campos referenciados en la select. revisa el código que te indiqué y verás que cada campo tiene precedido el nombre de su tabla separado con un punto delante. La select así te muestra los registros de ambas tablas como si fuesen una sola.

Ojo con el Union All, que posiblemente su rendimiento es infinitamente peor que el de JOIN. Si tienes un servidor local y poco registros tal vez no lo notes, pero si tu servidor está en la red y las tablas son grandes tal vez se caiga la "performance" de tu aplicación.

Suerte.

Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
Si si, lo entré tal cual con los puntos de referencias a cada una de las tablas pero el resultado es ni parecido al que necesito.
Si querés puedo pegar exactamente ambos códigos con una captura de la pantalla de ambos resultados para que veas la diferencia..

Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
Ok. Pega también la consulta tal como la introdujiste.

Saludos

Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
la primera es la que da como resultado lo que esperaba:
Tabla = Conexion.Exec("SELECT Fecha,Tipo,Numero,Accion,Autor,Titulo FROM Compras WHERE Autor=&1 AND Titulo=&2 AND Proveedor=&3 UNION ALL SELECT Fecha,Tipo,Numero,Accion,Autor,Titulo FROM Ventas WHERE Autor=&4 AND Titulo=&5 AND Proveedor=&6", I_Autor, I_Titulo, I_Provee, I_Autor, I_Titulo, I_Provee)


Y la segunda la de los resultados "inesperados"
TablaSeguim = Conexion.Exec("SELECT Compras.Fecha, Compras.Tipo, Compras.Numero, Compras.Accion, Compras.Autor, Compras.Titulo, Ventas.Fecha, Ventas.Tipo, Ventas.Numero, Ventas.Accion, Ventas.Autor, Ventas.Titulo FROM Compras JOIN Ventas ON Compras.Autor = &1 And Ventas.Autor = &2", I_Autor, I_Autor)


Union.jpg
Descripción:  
Tamaño: 26.67 KB
Visto: 411 veces

Union.jpg

Union.jpg
Descripción:  
Tamaño: 26.67 KB
Visto: 411 veces

Union.jpg

Union.jpg
Descripción:  
Tamaño: 26.67 KB
Visto: 411 veces

Union.jpg


Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
Bueno, acá va el resultado con JOIN

Aclaracion: A la primer consulta, la del UNION, que finalmente termine dejando por ahora en mi programa le agregué la comparación de Titulo y Editorial. Pero para el caso era lo mismo cuando solo lo hacía con el autor...

última edición por Marcelo el Sabado, 29 Octobre 2011, 22:02; editado 1 vez

Join.jpg
Descripción:  
Tamaño: 33.8 KB
Visto: 414 veces

Join.jpg

Join.jpg
Descripción:  
Tamaño: 33.8 KB
Visto: 414 veces

Join.jpg

Join.jpg
Descripción:  
Tamaño: 33.8 KB
Visto: 414 veces

Join.jpg


Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
Las consultas son correctas ambas, pero no hacen lo mismo. Con UNION ALL haces una consulta de unos campos, luego haces otra de otra tabla que tenga los mismos campos y los resultados los pones a continuación una de otra. Con JOIN, unes los registros de las dos tablas en las que coincida el campo de relación como si fuese una tabla única (los registros que no tengan campo correspondiente en la otra tabla no son incluídos).

No sé, exactamente, cual de los dos resultados era el que intentabas hacer pero, repito, son dos cosas distintas.

Suerte.

Perfil MP  
Objetivo: Re: Ayuda Con Consulta SQL
En realidad el resultado que necesitaba para este caso era el del UNION, pero el intento con el código que sugeriste me valió para entender de la mejor manera como se usa el JOIN y para que sirve.
Esto hizo que una consulta que hacía en forma recursiva recorriendo una tabla temporal para mostrar datos de dos tablas pueda ser reemplazada por UNA LÍNEA de consulta SQL con iguales resultados pero una velocidad incalculable...
No hay nada como hacer las cosas como se debe...
Muchísimas gracias!!!!

Marcelo

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.2098s (PHP: -54% SQL: 154%)
Consultas SQL: 32 - Debug off - GZIP Activado