我有一个多租户模型,试图显示一个输出,其中一个表的一列变成输出中的一行。
我有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;