【问题标题】:Mysql returning multiple column from same row in same in same tableMysql在同一个表中从同一行返回多个列
【发布时间】:2015-02-18 01:14:51
【问题描述】:

假设我有一个表名 "POST" 只包含 "POST_ID" ,我还有另一个表名 post_meta ,它还包含 "POST_ID"(作为外键)和另外两列 "meta_key" 和 "meta_value"

我的表结构是

张贴表:

post_ID
1
2

元表:

meta_id      post_id        meta_key          meta_value 
1              1            suite_size        1000
2              1            suite_number      10 
3              2            suite_size        2000
4              2            suite_number      20  

我想创建一个这样的表

post_id   suite_size  suite_number
1         1000         10
2         2000         20  

我该怎么做?

【问题讨论】:

    标签: mysql sql select group-by pivot


    【解决方案1】:

    试试这个:

    SELECT pm.post_ID,
           SUM(CASE WHEN pm.meta_key = 'suite_size' THEN pm.meta_value ELSE 0 END) as suite_size,
           SUM(CASE WHEN pm.meta_key = 'suite_number' THEN pm.meta_value ELSE 0 END) as suite_number
    FROM post_meta pm 
    GROUP BY pm.post_ID;
    

    如果您想要所有帖子,无论它们是否存在于 post_meta 表中,请使用以下查询

    SELECT p.post_ID,
           SUM(CASE WHEN pm.meta_key = 'suite_size' THEN pm.meta_value ELSE 0 END) as suite_size,
           SUM(CASE WHEN pm.meta_key = 'suite_number' THEN pm.meta_value ELSE 0 END) as suite_number
    FROM post p
    LEFT JOIN post_meta pm ON p.post_id = pm.post_ID
    GROUP BY p.post_ID;
    

    【讨论】:

      【解决方案2】:

      您需要使用透视技术将行显示为列以实现此目的

      select
      p.post_ID,
      max(case when pm.meta_key = 'suite_size' then pm.meta_value end) as `suite_size`,
      max(case when pm.meta_key = 'suite_number' then pm.meta_value end) as `suite_number`
      from post p
      join post_meta pm on pm.post_id = p.post_ID
      group by p.post_ID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        • 2016-01-13
        • 2018-11-17
        • 2013-04-23
        相关资源
        最近更新 更多