mysql - 列到行转换: MySQL

标签 mysql prepared-statement concatenation

我有一个 Multi-Tenancy 模型,并尝试显示一个输出,其中一个表的一列变成输出中的一行。

我有 3 个表 - 1 个数据表、1 个元数据表和一个扩展表。

这是我的查询:

set @sql=NULL;
SELECT group_concat(CONCAT( 
    'MAX(If(EXTLABEL = ''', EXTLABEL, ''', VALUE, NULL)) AS ',EXTLABEL))
    into @sql
FROM TENANT_METADATA, TENANT_EXTENSIONTABLE
WHERE TENANT_METADATA.EXTENSION_ID = TENANT_EXTENSIONTABLE.EXTENSION_ID;

SET @sql=CONCAT('SELECT TENANT_NAME AS TENANT_TABLE, ', @sql, ' 
                FROM TENANT_DATATABLE, TENANT_METADATA, TENANT_EXTENSIONTABLE 
                WHERE TENANT_DATATABLE.RECORD_ID=TENANT_EXTENSIONTABLE.RECORD_ID
                AND TENANT_METADATA.EXTENSION_ID = TENANT_EXTENSIONTABLE.EXTENSION_ID
                group by TENANT_DATATABLE.TENANT_NAME');
PREPARE stmt FROM @sql;
Execute stmt;
DEALLOCATE prepare stmt;

在我的输出中,我需要列名称为“Tenant_Table、ExtLABEL1、ExtLABEL2、ExtLABEL3 等。 并且 VALUE 字段应显示 EXTLABEL 列的值。

我的查询似乎从不同的表中获取了正确的值,但是当我执行Prepare stmt时,它说我有语法错误,但我无法识别错误。任何帮助将非常感激。谢谢。

最佳答案

列到行:UNION ALL

( SELECT Tenant_Table, 1, ExtLABEL1 AS EXTLABEL FROM ... )
UNION ALL
( SELECT Tenant_Table, 2, ExtLABEL2 AS EXTLABEL FROM ... )
UNION ALL
( SELECT Tenant_Table, 3, ExtLABEL3 AS EXTLABEL FROM ... )
ORDER BY 1,2;

关于mysql - 列到行转换: MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28616280/

相关文章:

php - 使用 PDO 调用带有 Out 参数的存储过程

SQL Server 连接忽略空值

PHP 转义编码引号

java - 多线程——MySQL java connector prepared statement使用

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

安卓 TextView : "Do not concatenate text displayed with setText"

r - 向字符串添加单引号

mysql - Quill - INSERT INTO SELECT... 语法?

php - 在单个表单中插入到 php 中的多个表中