LEFT JOIN查询结果排序与预期不符的技术咨询
解决LEFT JOIN结果排序问题
要让你的LEFT JOIN查询结果按预期的a.col_value有序排列,只需在查询语句末尾添加显式的ORDER BY子句,同时可以额外指定b.col_value来让每个a对应的b值也按顺序排列:
select * from test a left join test b ON a.col_value < b.col_value ORDER BY a.col_value, b.col_value;
原因说明
数据库的查询结果不会默认保证任何排序顺序,即使你插入数据是有序的,或者JOIN过程中看起来有某种规律,这都是执行计划带来的偶然结果。只有通过ORDER BY子句明确指定排序规则,才能确保结果始终符合你的预期。
测试环境信息
建表与插入语句:
create table test (col_value int); insert into test values(1); insert into test values(2); insert into test values(3); insert into test values(4);
原查询语句:
select * from test a left join test b ON a.col_value < b.col_value;
原查询结果:
a col_value | b col_value 1 | 2 1 | 3 2 | 3 1 | 4 2 | 4 3 | 4 4 | (null)
预期结果:
a col_value |b col_value 1 | 2 1 | 3 1 | 4 2 | 3 2 | 4 3 | 4 4 | (null)
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

