如何实现SQL查询结果单行展示 解决同ID分两行重复问题
问题原因
当前使用的UNION语法作用是对两个查询结果做纵向行合并:两个查询均返回2列数据,执行后会把两个查询的结果逐行堆叠到同一结果集中。这就导致同一个订单ID会生成两行记录:一行存储订单发布时间,另一行存储订单总金额,自然无法实现单行展示。
修正方案
改用表关联(JOIN)做横向字段拼接,以订单主表为基准关联订单元数据表,把同一个ID对应的不同字段合并到同一行返回,修正后的查询语句如下:
SELECT p.id, p.post_date, pm.meta_value AS order_total FROM mln_posts p LEFT JOIN mln_postmeta pm ON p.id = pm.post_id AND pm.meta_key = '_order_total' WHERE p.post_type = 'shop_order' ORDER BY p.id
使用说明
- 语句中用
p作为mln_posts的别名、pm作为mln_postmeta的别名简化写法,关联时直接匹配订单ID,同时筛选元数据键为_order_total,避免关联出多余的元数据记录 - 使用
LEFT JOIN会保留所有shop_order类型的订单,若对应订单未写入总金额元数据,order_total字段会返回空值;如果需要过滤掉没有总金额记录的异常订单,把LEFT JOIN替换为INNER JOIN即可
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

