You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何将同Post ID的不同元键展示在一行?查询仅返回一条的问题

解决SQL行转列仅返回单条数据的问题

你想要把相同Post ID的元键值合并到同一行,用MAX(IF(...))实现行转列的思路是对的,但现在只返回1条数据,问题出在缺少GROUP BY子句。

问题原因

你使用了MAX()这类聚合函数,但没有指定分组依据,数据库会把整个查询结果当成一个大分组来聚合,自然只会返回一行数据——把所有ID的结果都强行合并在一起了。

修正后的SQL语句

SELECT P.ID, 
MAX(IF(PM.meta_key = 'name', PM.meta_value, NULL)) AS name, 
MAX(IF(PM.meta_key = 'symbol', PM.meta_value, NULL)) AS symbol, 
MAX(IF(PM.meta_key = 'date', PM.meta_value, NULL)) AS date, 
MAX(IF(PM.meta_key = 'price', PM.meta_value, NULL)) AS price 
FROM crypto_posts AS P 
LEFT JOIN crypto_postmeta AS PM on PM.post_id = P.ID 
WHERE P.post_type = 'historical-info' 
GROUP BY P.ID  -- 新增分组依据,按Post ID单独分组
ORDER BY P.post_date DESC 
LIMIT 10

补充说明

加上GROUP BY P.ID后,数据库会按照每个Post ID单独划分分组,MAX()函数会在每个ID的分组内生效,把该ID对应的各个元键值提取出来并合并到同一行,这样就能得到你期望的「每个ID一行」的结果了。

内容的提问来源于stack exchange,提问作者kristoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:17:08