mysql - 动态查询MySQL

标签 mysql sql

我也遇到这样的情况,但是解决不了。

结构数据库:

表元素

id | idElemento | idTipo
1  | 1          | 1

表蒂皮

id | Tipo
1  | Persona

表瓦洛里

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,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

关于mysql - 动态查询MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25992302/

相关文章:

mysql - 简单的mysql查询计数失败

c# - 寻求一种成本较低的解决方案来匹配两个表的 ID

sql - 给定字母,获取字母表中的下一个字母

SQL:如何更新多个字段,以便将空字段内容移动到逻辑上最后一列 - 丢失空白地址行

c++ - 从 MySQL 获取 UTF-8 数据到 Linux C++ 应用程序

php - 来自主机名 "localhost"而不是容器名称的 php 容器的数据库连接

mysql - 将时间戳转换为正确的格式

mysql - SQL中Join Query中一列的SUM

sql - 如何在条件下仅将一些 Guids 从一个表替换为另一个表

mysql - 在 MySQL 中创建具有随机名称的临时表