Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ayuda Con Consulta SQL
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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
 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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..
 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda Con Consulta SQL 
 
Ok. Pega también la consulta tal como la introdujiste.

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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: 408 veces

Union.jpg

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

Union.jpg

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

Union.jpg


 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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...

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

Join.jpg

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

Join.jpg

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

Join.jpg


 



 
última edición por Marcelo el Sabado, 29 Octobre 2011, 22:02; editado 1 vez 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
Marcelo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Ayuda Y Mas Ayuda, Con Programar Fecha luisrel Controles/Librerías/Componentes 2 Viernes, 03 Diciembre 2010, 15:50 Ver último mensaje
luisrel
No hay nuevos mensajes Ayuda Con Una Funcion De Consulta A Base D... aratar79 Bases de Datos 4 Viernes, 31 Agosto 2012, 01:53 Ver último mensaje
aratar79
No hay nuevos mensajes Gambas3.4(Casi).Ventana De Ayuda Y Ayuda O... Shell Instalación 3 Martes, 22 Enero 2013, 00:23 Ver último mensaje
Shell
No hay nuevos mensajes (Ayuda) Consulta De Fechas Por Rango skaterleopoldo12 Bases de Datos 4 Viernes, 22 Febrero 2013, 14:18 Ver último mensaje
skaterleopoldo12
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron