动态查询MySQL

时间:2014-09-23 10:05:14

标签: mysql sql

我有这种情况,但我无法解决它。

结构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 | 

1 个答案:

答案 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 中的字段。但是你走了:

SQLFiddle