mysql - 如何获取每个 Extension_ID 的所有值

标签 mysql multi-tenant

我有一个 Multi-Tenancy 模式,这里是我的查询,用于从一个表中检索列名称并从另一个表中检索值。

SELECT 
MAX(CASE WHEN TME.EXTENSION_ID = '555' THEN EXT.value END) A,
MAX(CASE WHEN TME.EXTENSION_ID = '556' THEN EXT.value END) B,
MAX(CASE WHEN TME.EXTENSION_ID = '559' THEN EXT.value END) C,
MAX(CASE WHEN TME.EXTENSION_ID = '560' THEN EXT.value END) D,
MAX(CASE WHEN TME.EXTENSION_ID = '557' THEN EXT.value END) E,
MAX(CASE WHEN TME.EXTENSION_ID = '558' THEN EXT.value END) F,
MAX(CASE WHEN TME.EXTENSION_ID = '561' THEN EXT.value END) G,
MAX(CASE WHEN TME.EXTENSION_ID = '562' THEN EXT.value END) H
 FROM TENANTDATAEXTENSION EXT, TENANTMETADATAEXTENSION TME
 WHERE TME.EXTENSION_ID = EXT.EXTENSION_ID;

这只会返回每个 Extension_ID 的 1 行。但是,我有不止 1 行。我如何获得全部?

当前输出:

Column Name:    A    B    C    D     E    F     G     H
Column Values:  A1   B1   C1   D1    E1   F1    G1    H1

预期输出:

Column Name:    A    B    C    D     E    F     G     H
Column Values:  A1   B1   C1   D1    E1   F1    G1    H1
                A2   B2   C2   D2    E2   F2    G2    H2
                A3   B3   C3   D3    E3   F3    G3    H3

TENANTDATAEXTENSION 表如下所示:

Column Name: Extension_ID Extension_Label
Column Values: 
                555      A
                556      B
                557      E
                558      F
                559      C
                560      D
                561      G
                562      H

TENANTMETADATAEXTENSION 表如下所示:

Column Name: Extension_ID Value.

Column Values:
                555      A1
                555      A2
                555      A3
                556      B1
                556      B2
                556      B3
                557      E1
                557      E2
                557      E3
                etc.........

最佳答案

看看下面的代码是否满足您的需求。

SET @ext_id = '***';
SET @level = 0;


SELECT 
    MAX(CASE WHEN ext.EXTENSION_ID = '555' THEN tme.value ELSE '' END) A,
    MAX(CASE WHEN ext.EXTENSION_ID = '556' THEN tme.value ELSE '' END) B,
    MAX(CASE WHEN ext.EXTENSION_ID = '559' THEN tme.value ELSE '' END) C,
    MAX(CASE WHEN ext.EXTENSION_ID = '560' THEN tme.value ELSE '' END) D,
    MAX(CASE WHEN ext.EXTENSION_ID = '557' THEN tme.value ELSE '' END) E,
    MAX(CASE WHEN ext.EXTENSION_ID = '558' THEN tme.value ELSE '' END) F,
    MAX(CASE WHEN ext.EXTENSION_ID = '561' THEN tme.value ELSE '' END) G,
    MAX(CASE WHEN ext.EXTENSION_ID = '562' THEN tme.value ELSE '' END) H
FROM TENANTDATAEXTENSION ext
LEFT JOIN 
 ( SELECT CASE WHEN @ext_id <> tme.extension_id THEN @level := 0 ELSE @level := @level +1 END level,
        @ext_id := tme.extension_id extension_id,
        tme.value 
 FROM TENANTMETADATAEXTENSION tme
 ORDER BY extension_id, value ) tme
ON ext.extension_id = tme.extension_id
GROUP BY tme.level
HAVING CONCAT(A, B, C, D, E, F, G, H) <> ''

这是 SQL Fiddle DEMO

您可能想在那里尝试您的测试用例。

关于mysql - 如何获取每个 Extension_ID 的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29958623/

相关文章:

MySQL相关子查询

mysql - 如何从mysql中的字符串创建int列表?

php - 比较两个表中的记录

mysql - 从一个表中选择查询以检查列中是否存在相同的值,mysql select query

php - 通过php上传图片到服务器

asp.net-mvc-3 - Orchard Project 中的 Multi-Tenancy 是如何实现的

azure - 如何使用azure服务主体进行 Multi-Tenancy 应用程序?

c# - 在 Asp.net Core 3.1 应用程序中处理子域

c# - 虚拟导航属性和 Multi-Tenancy

grails - Multi-Tenancy - 动态注册 JNDI 数据源