SQL - Juntar sentencias sql

 
Vista:

Juntar sentencias sql

Publicado por Manuel (3 intervenciones) el 28/02/2018 16:00:20
Tengo que mostrar artículos por vendedor y comprador. El problema es que la tabla persona tiene un campo tipo enum en el que puede ser vendedor o comprador. He hecho las dos muestras por separado para que me muestre los artículos y el comprador, y por otro lado los artículos y el vendedor. Pero no sé cómo hacer para tener una muestra con 3 columnas, artículos, comprador y vendedor.

Esta es la primera sentencia:

select articulo.Marca, Modelo, persona.Nombre as Comprador from articulo, persona where articulo.Dni_excompra = persona.Dni;
Y la segunda:

select articulo.Marca, Modelo, persona.Nombre as Vendedor from articulo, persona where articulo.Dni_cobra = persona.Dni;

Si me podéis ayudar...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Juntar sentencias sql

Publicado por Leonardo Josué (1173 intervenciones) el 28/02/2018 19:16:08
Hola Manuel:

Lo que tienes es una doble fk hacia una misma tabla y para resolverlo, lo que tienes que hacer es "duplicar" tu tabla de personas para unir por separado cada registro. Veamos un ejemplo:

Supongamos que tus tablas son más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT * FROM personas;
+------------+--------------+
| id_persona | nombre       |
+------------+--------------+
|          1 | persona uno  |
|          2 | persona dos  |
|          3 | persona tres |
+------------+--------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM articulos;
+-------------+-------------+-------------+--------------+
| id_articulo | descripcion | id_vendedor | id_comprador |
+-------------+-------------+-------------+--------------+
|           1 | Articulo 1  |           1 |         NULL |
|           2 | Articulo 2  |        NULL |            2 |
|           3 | Articulo 3  |           1 |            3 |
+-------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

En este caso, los campos id_vendedor e id_comprador son llaves foráneas a la tabla de personas. No nos pones datos de ejemplo, pero creo que así es más o menos tu modelo. Entonces, para obtener el nombre del vendedor y/o comprador de cada artículo, lo que debes hacer es un DOBLE JOIN a la tabla personas, utilizando un ALIAS. así puedes unir de manera independiente cada tabla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT
    -> id_articulo, descripcion, P1.nombre vendedor, P2.nombre comprador
    -> FROM
    ->   articulos
    -> LEFT JOIN personas P1 ON P1.id_persona = articulos.id_vendedor
    -> LEFT JOIN personas P2 ON P2.id_persona = articulos.id_comprador;
+-------------+-------------+-------------+--------------+
| id_articulo | descripcion | vendedor    | comprador    |
+-------------+-------------+-------------+--------------+
|           1 | Articulo 1  | persona uno | NULL         |
|           2 | Articulo 2  | NULL        | persona dos  |
|           3 | Articulo 3  | persona uno | persona tres |
+-------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

Haz la prueba y nos comentas

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Juntar sentencias sql

Publicado por Manuel (3 intervenciones) el 01/03/2018 11:06:39
Funciona!!! Eres un crack. Al final le he puesto una condición porque había artículos que estaban comprados pero no vendidos.

select Marca, Modelo, P1.Nombre Vendedor, P2.Nombre Comprador from articulo left join persona P1 on P1.Dni = articulo.Dni_cobra left join persona P2 on P2.Dni = articulo.Dni_excompra where F_venta !='NULL';

Igual te tengo que hacer alguna otra pregunta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar