如您所知,union删除重复的行。我认为它从后者中删除,但事实并非如此。
我发现如果没有order by子句,Oracle 会按第一列对合并的数据集进行排序并删除重复项。
select 4,5,6 from dual
union
select 1,2,3 from dual
union
select 4,5,6 from dual
Run Code Online (Sandbox Code Playgroud)
结果:
1 2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)
而我期望:
4 5 6
1 2 3
Run Code Online (Sandbox Code Playgroud)
我在这方面失败了很多次,并使问题变得简单,就像上面的例子一样。
如何在没有 的情况下保持联合序列order by?
在我的真实案例中,第一个select是完全匹配(=)结果,第二个是部分匹配(like)结果。
例如,如果我搜索罗马人。
全场比赛结果:罗马,部分比赛结果:香气。
当然,完整的比赛结果应该是第一位的。正如我所说,它似乎order by是union结果的第一列。
但是,如您所见:
select 'roma' from dual -- result comes out anyway..
union select 'aroma' from dual; …Run Code Online (Sandbox Code Playgroud)