我有这种情况,但我无法解决它。
结构DB:
TABLE Elementi
id | idElemento | idTipo
1 | 1 | 1
表Tipi
id | Tipo
1 | Persona
表Valori
id | idElemento | idInfo | Valore
1 | 1 | 1 | Mario
1 | 1 | 2 | Rossi
1 | 1 | 3 | 0810000000
1 | 1 | 3 | 3330000000
表格信息
id | Info | Multi
1 | Nome | 0
1 | Cognome | 0
1 | Telefono | 1
期望的结果:
idElemento | Nome | Cognome | Telefono |
1 | Mario | Rossi | 0810000000, 3330000000 |
答案 0 :(得分:0)
正如alexander评论的那样,info表必须有一个关于信息的增量字段(1,2,3)。
您可以使用group_concat功能组合Telfono。
因为,您希望基本上从表 info 填充字段。这涉及transpose table concept:
SELECT idelemento
,max(CASE
WHEN t1.info = 'Nome'
THEN t1.value
ELSE NULL
END) AS Nome
,max(CASE
WHEN t1.info = 'Cognome'
THEN t1.value
ELSE NULL
END) AS Cognome
,max(CASE
WHEN t1.info = 'Telefono'
THEN t1.value
ELSE NULL
END) AS Telefono
FROM (
SELECT idElemento
,info.info
,group_concat(valore separator ', ') value
FROM valori
INNER JOIN info ON info.id = valori.idInfo
GROUP BY idInfo
) t1;
内部查询在没有转置数据的情况下精确地给出相同的结果。但是,我不确定为什么需要填充表 info 中的字段。但是你走了: