entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Consulta SQL, parece un absurdo, pero es mi absurdo.

Coloco datos de ejemplo:

Tabla1
IDProducto Ingreso
1 10
2 15
3 20

Tabla2
IDProducto Egreso
2 10
3 20
4 5
5 6

El resultado que quiero obtener con una sola consulta SQL (que no se que me paso, pero no pude, o mis neuronas ya no dan).

IDProducto Ingreso Egreso
1 10 null
2 15 10
3 20 20
4 null 5
5 null 6

Donde dice null también puede ser cero.

Gracias....

Guidex.

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola Guidex,

me encantan estos problemas aparentemente sencillos ;-)

Una solución es:

SELECT Uproducto, Uingreso, Uegreso
FROM (
SELECT T1.id AS Uproducto, T1.ingreso AS Uingreso, T2.egreso AS Uegreso
FROM Tabla1 AS T1
LEFT JOIN Tabla2 AS T2 ON T1.id=T2.id
UNION ALL
SELECT T2.id AS Uproducto, NULL AS Uingreso, T2.egreso AS Uegreso
FROM Tabla2 AS T2
) Calculo
GROUP BY Uproducto

Tal vez haya alguna más óptima, pero esta es la mejor que se me ocurre.

Saludos!

PD: puedo usar el ejemplo como pregunta de examen de SQL?
PPD: te dejo la estructura de las tablas que usé:

CREATE TABLE IF NOT EXISTS `Tabla1` (
  `id` int(11) NOT NULL,
  `ingreso` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
NSERT INTO `Tabla1` (`id`, `ingreso`) VALUES
(1, 10),
(2, 15),
(3, 20);

CREATE TABLE IF NOT EXISTS `Tabla2` (
  `id` int(11) NOT NULL,
  `egreso` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `Tabla2` (`id`, `egreso`) VALUES
(2, 10),
(3, 20),
(4, 5),
(5, 6);

1voto

Guidex comentado

Gracias Leonardo, no importa lo complicado si funciona, es más, yo lo volveré mas complicado porque a esta consulta tengo que aumentarle 3 tablas más.

Pensé que me ibas a fallar, como una respuesta anterior, pero no, recobro la confianza en ti.

Y claro, si puedes utilizarlo para tus alumnos, mientras mas sepan ellos, mejores profesionales serán.

0voto

Leonardo-Tadei comentado

Es que tus preguntas suelen ser sobre cuestiones de la plataforma MS Windwos, y usamos acá software de esa marca entre 1997 y 1999 solamente ... y recuerdo esos casi 2 años como los peores de mi vida profesional.

Ahora las cosas han evolucionado, pero no he vuelto a tocar esas plataformas.

Saludos cordiales!

PD: igual no estoy seguro de a qué respuesta anterior hacés referencia. Ya me contarás en privado.

0voto

Guidex comentado

Si lo solucione, pero lo que tome en cuenta es que la comunicación es entre exes es una sola pc, no pude resolver entre 2 PCs en la misma red.
Ni modo, por lo menos para llegar a Roma existen miles de caminos.

0voto

Guidex comentado

Leonardo, mejorando el código, por si alguien mas lo necesita o solo tiene interés en saber más.

SELECT FROM tabla1 LEFT OUTER JOIN tabla2 ON (tabla1.IDProducto = tabla2.IDProducto)
UNION
SELECT
FROM tabla1 RIGHT OUTER JOIN tabla2 ON (tabla1.IDProducto = tabla2.IDProducto)

Esto es valido en MySQL como en SQL Server, pero algo mas sencillo para SQL Server es utilizar FULL OUTER JOIN, en MYSQL no existe, así que hay recurrir a esta forma.

0voto

Leonardo-Tadei comentado

Gracias Guidex!

A mi el planificador me da lo mismo para las dos querys, la tuya y la mía... lo cual tiene sentido porque las dos tienen un JOIN hacia un lado (LEFT y RIGHT) y un UNION del resultado.

0voto

Leonardo-Tadei comentado

La solución de usar un archivo para compartir los datos funciona también en red: basta que un exe lo lea en local y el otro vía un recurso compartido... pero nos vamos de tema.
Saludos!

1voto

kratos91 Puntos1520

SELECT * FROM tabla1 INNER JOIN tabla2 WHERE tabla1.IDProducto = tabla2.IDProducto

Aquí tienes un ejemplo muy claro:
http://sql.11sql.com/sql-inner-join.htm

Saludos!

1voto

Guidex comentado

Gracias Kratos, pero no sirve, justamente escribo aquí porque tengo este problema.
Tu consulta, solo me muestra 2 productos (el 2 y 3), porque los 2 se encuentran en las 2 tablas, pero el producto 1, 4 y 5 no aparecen

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta