我有一个 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) <> ''
您可能想在那里尝试您的测试用例。
关于mysql - 如何获取每个 Extension_ID 的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29958623/