【问题标题】:SQL Merge two equal column names with two different values into one rowSQL将具有两个不同值的两个相等的列名合并到一行中
【发布时间】:2014-09-13 17:09:45
【问题描述】:

我想将两个具有不同值的相等列名(meta_value)合并为一个行结果而不是两个。

SELECT t1.ID, t1.post_content AS product, t2.meta_value AS price
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
LIMIT 0 , 30

结果

ID      product      price
1973    product1     12.35
1973    product1     12.10

我希望它看起来像这样

ID      product      price      sell
1973    product1     12.35      12.10

price的meta_key是_price,sell的meta_key是_sell

【问题讨论】:

  • 问题是什么?你尝试了什么?

标签: mysql sql wordpress


【解决方案1】:

看起来您可以使用带有 case 语句的聚合函数来转换数据

SELECT t1.ID, 
   t1.post_content AS product, 
   max(case when meta_key = '_price' then t2.meta_value end) AS price, 
   max(case when meta_key = '_sell' then t2.meta_value end) AS sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30

但根据您的表结构并不完全清楚,因此您也可以使用:

SELECT t1.ID, 
   t1.post_content AS product, 
   max(t2.meta_value) AS price, 
   min(t2.meta_value) AS sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30

【讨论】:

    【解决方案2】:
    SELECT
      t1.ID,
      t1.post_content AS product,
      max(case when t2.meta_key='_price' then t2.meta_value end) AS price,
      max(case when t2.meta_key='_sell' then t2.meta_value end) AS sell
    FROM wp_posts AS t1
         INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id )
    WHERE t1.post_type =  'product'
    GROUP BY t1.ID, t1.post_content
    LIMIT 0 , 30
    

    【讨论】:

    • @MahmoudGamal 当我回答 bluefeet 的答案时只有第二个查询,我不确定这是否总是正确的
    【解决方案3】:

    希望对你有帮助,

    SELECT t1.ID, t1.post_content AS product,max(t2.meta_value) as price,min(t2.meta_value) as sell
    FROM wp_posts AS t1
    INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
    WHERE t1.post_type =  'product'
    LIMIT 0 , 30
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      相关资源
      最近更新 更多