我想知道我的方法是否足够,可行,我该怎么做?
考虑你有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中的值来选择它们的相关字段,按lang分组。选择表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,但这不是我想要的。
如果有的话我应该从哪里开始? : - )
由于
答案 0 :(得分:1)
试试这个:
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;
这会给你:
| ID | LANG | BANNER_TYPE | PRIORITY | TIMING |
-----------------------------------------------
| 26 | da | single | 5 | 5 |
| 26 | de | single | 1 | 10 |
请注意:在我使用MAX
的查询中。因为,表id lang
中的每个组TableB
都有两个值BANNER_TYPE | PRIORITY | TIMING
所以您希望每个组都有哪个值?