[英]MySQL SELECT: Returning multiple columns based on a column value in the same table
[英]Mysql returning multiple column from same row in same in same table
假设我的表名“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
我怎样才能做到这一点 ?
尝试这个:
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;
您需要使用pivot技术将行显示为列才能实现此目的
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.