|
Página 1 de 1
|
Autor |
Mensaje |
Marcelo
Aprendiz
Registrado: Septiembre 2011
Mensajes: 66
Edad: 50
|
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
|
#1 Miercoles, 26 Octobre 2011, 00:39 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
|
#2 Miercoles, 26 Octobre 2011, 08:43 |
|
|
Marcelo
Aprendiz
Registrado: Septiembre 2011
Mensajes: 66
Edad: 50
|
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
|
#3 Miercoles, 26 Octobre 2011, 18:59 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
|
#4 Jueves, 27 Octobre 2011, 07:41 |
|
|
Marcelo
Aprendiz
Registrado: Septiembre 2011
Mensajes: 66
Edad: 50
|
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..
|
#5 Jueves, 27 Octobre 2011, 20:17 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Ayuda Con Consulta SQL
Ok. Pega también la consulta tal como la introdujiste.
Saludos
=================== No podemos regresar
|
#6 Jueves, 27 Octobre 2011, 22:45 |
|
|
Marcelo
Aprendiz
Registrado: Septiembre 2011
Mensajes: 66
Edad: 50
|
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)
Descripción: |
|
Tamaño: |
26.67 KB |
Visto: |
412 veces |
|
Descripción: |
|
Tamaño: |
26.67 KB |
Visto: |
412 veces |
|
Descripción: |
|
Tamaño: |
26.67 KB |
Visto: |
412 veces |
|
|
#7 Sabado, 29 Octobre 2011, 21:56 |
|
|
Marcelo
Aprendiz
Registrado: Septiembre 2011
Mensajes: 66
Edad: 50
|
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...
Descripción: |
|
Tamaño: |
33.8 KB |
Visto: |
415 veces |
|
Descripción: |
|
Tamaño: |
33.8 KB |
Visto: |
415 veces |
|
Descripción: |
|
Tamaño: |
33.8 KB |
Visto: |
415 veces |
|
última edición por Marcelo el Sabado, 29 Octobre 2011, 22:02; editado 1 vez
|
#8 Sabado, 29 Octobre 2011, 21:58 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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.
|
#9 Domingo, 30 Octobre 2011, 05:43 |
|
|
Marcelo
Aprendiz
Registrado: Septiembre 2011
Mensajes: 66
Edad: 50
|
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
|
#10 Domingo, 30 Octobre 2011, 18:45 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|