0

我想知道我的方法是否足够、可能,我该怎么做?

假设您有 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 做的,但这不是我想要的。

如果有的话,我应该从哪里开始?:-)

谢谢

4

1 回答 1

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;

SQL 小提琴演示

这会给你:

| ID | LANG | BANNER_TYPE | PRIORITY | TIMING |
-----------------------------------------------
| 26 |   da |      single |        5 |      5 |
| 26 |   de |      single |        1 |     10 |

请注意:在我使用的查询中MAX。因为,id lang表中的每个组TableB都有两个值,BANNER_TYPE | PRIORITY | TIMING所以您想要每个组的哪个值?

于 2013-01-15T13:42:17.013 回答