我想知道我的方法是否足够、可行以及我该怎么做?
假设您有 2 个 MySQL 表:
表A
ID alias
-- --
11 banner_a
26 banner_b
表B
Column Type
pid int(10)
lang varchar(2)
field varchar(255)
value text
表 B 的示例数据:
id lang field value
26 da banner_type single
26 da priority 5
26 da timing 5
26 de banner_type single
26 de priority 1
26 de timing 10
因此,假设我想从表 A 中选择所有/部分记录,以及它们的相关字段以及表 B 中的值,并按语言分组。其中B表中的字段像MySQL中的常规列一样被选择,并且它的值将是字段的值。
期望看到这样的结果:
结果记录1:
id 26
alias banner_b
lang da
banner_type single
priority 5
timing 5
结果记录2:
id 26
alias banner_b
lang de
banner_type single
priority 5
timing 5
几年前我用 COALESCE 做过类似的事情,但这不是我想要的。
如果有的话我应该从哪里开始? :-)
谢谢
最佳答案
试试这个:
SELECT
b.id,
b.lang,
MAX(CASE WHEN b.field = 'banner_type' THEN b.value END) AS 'banner_type',
MAX(CASE WHEN b.field = 'priority' THEN b.value END) AS 'priority',
MAX(CASE WHEN b.field = 'timing' THEN b.value END) AS 'timing'
FROM TableA a
INNER JOIN TableB b ON a.ID = b.ID
GROUP BY b.id, b.lang;
SQL Fiddle Demo
这会给你:
| ID | LANG | BANNER_TYPE | PRIORITY | TIMING |
-----------------------------------------------
| 26 | da | single | 5 | 5 |
| 26 | de | single | 1 | 10 |
请注意:在查询中我使用了MAX
。因为,表 TableB
中的每个组 id lang
的每个 BANNER_TYPE | 都有两个值。优先| TIMING
那么您希望每个组的值是多少?
关于MySQL 连接和第二个表中的字段作为结果中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14338996/