LEFT JOIN nulos y fila a columna
Publicado por Hugo (3 intervenciones) el 25/04/2020 19:00:26
Tengo tres tablas
producto: productos
Codigo: cada producto puede tener distintos tipos de código: barra, fabrica, interno
ProductoCodigo es la que relaciona un producto con su código. Un producto puede tener 0, 1.. n códigos (como máximo uno solo por tipo (tabla código) n es la cantidad de registros de tabla código)
Con estos datos y mi consulta obtengo:
y me interesa obtener
Desde ya muchas gracias a cualquier ayuda o punta que me tiren para resolver mi problema
producto: productos
Codigo: cada producto puede tener distintos tipos de código: barra, fabrica, interno
ProductoCodigo es la que relaciona un producto con su código. Un producto puede tener 0, 1.. n códigos (como máximo uno solo por tipo (tabla código) n es la cantidad de registros de tabla código)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
CREATE TABLE producto
(
prod_id integer, prod_nombre nvarchar(50),
PRIMARY KEY (prod_id)
);
INSERT INTO PRODUCTO (prod_id,prod_nombre)
VALUES (1,'Aceite'), (2,'Arroz'), (3,'Harina')
CREATE TABLE codigo
(
cod_id integer, cod_nombre nvarchar(50),
PRIMARY KEY (cod_id)
);
INSERT INTO CODIGO (cod_id,cod_nombre)
VALUES (1,'CodBarra'), (2,'CodFabrica'), (3,'CodInterno')
CREATE TABLE CODPROD
(
prod_id integer, cod_id integer, codprod_Valor nvarchar(50),
PRIMARY KEY (prod_id,cod_id),
FOREIGN KEY (prod_id) REFERENCES producto(prod_id),
FOREIGN KEY (cod_id) REFERENCES codigo(cod_id)
);
INSERT INTO CODPROD (prod_id,cod_id,codprod_valor)
VALUES (1,1,'AAAA'), (1,2,'0000'), (1,3,'CINT01'),
(2,1,'BBBB'),
(2,3,'3333')
SELECT p.prod_id, p.prod_nombre,
if(c.cod_id = 1, codprod_valor, '') AS Codigo1,
if(c.cod_id = 2, codprod_valor, '') AS Codigo2,
if(c.cod_id = 3, codprod_valor, '') AS Codigo3
FROM producto p
LEFT JOIN codprod cp
ON p.prod_id=cp.prod_id
INNER JOIN codigo c
ON cp.cod_id=c.cod_id
Con estos datos y mi consulta obtengo:
1
2
3
4
5
6
prod_id prod_nombre Codigo1 Codigo2 Codigo3
1 Aceite AAAA "" ""
1 Aceite "" 0000 ""
1 Aceite "" "" CINT01
2 Arroz BBBB "" ""
2 Arroz "" "" 3333
y me interesa obtener
1
2
3
4
prod_id prod_nombre Codigo1 Codigo2 Codigo3
1 Aceite AAAA 0000 CINT01
2 Arroz BBBB 3333 ""
3 Harina "" "" ""
Desde ya muchas gracias a cualquier ayuda o punta que me tiren para resolver mi problema
Valora esta pregunta


0