如何修改UNION ALL查询,实现结果逐行交错排序?
调整SQL查询实现横向合并结果
我明白你的需求啦——原本用UNION ALL得到的是两行纵向排列的结果,现在想要把来自abc和def表的两组数据横向合并成一行展示,正好匹配你想要的目标格式。
修改后的SQL代码
SELECT -- 给abc表的字段添加明确别名 abc_sub.i_id AS abc_id, abc_sub.i_item AS abc_item, abc_sub.i_count AS abc_count, -- 给def表的字段添加明确别名 def_sub.j_id AS def_id, def_sub.j_item AS def_item, def_sub.j_count AS def_count FROM -- 第一个子查询获取abc表的目标记录 (SELECT i_id, i_item, i_count FROM abc WHERE i_id = 123) AS abc_sub -- 交叉连接两个子查询,因为每个子查询仅返回单条记录 CROSS JOIN -- 第二个子查询获取def表的目标记录 (SELECT j_id, j_item, j_count FROM def WHERE j_id = 4567) AS def_sub
关键说明
- 原查询用
UNION ALL是纵向拼接两个结果集,所以返回两行;而改用子查询+CROSS JOIN是将两个单条结果横向合并,最终返回一行,完美匹配你想要的输出格式。 - 给每个字段添加带表标识的别名(比如
abc_id、def_item),能让结果更易读,清晰区分字段来源。 - 如果你的子查询可能返回多条记录,
CROSS JOIN会产生笛卡尔积,这时你需要根据业务逻辑用INNER JOIN关联对应字段,但从你的原查询条件来看,i_id=123和j_id=4567应该都是单条记录,所以CROSS JOIN完全适用。
内容的提问来源于stack exchange,提问作者Sharif Mia
相关产品推荐
相关产品推荐

