SQL:如何使用UNION并通过特定的选择进行排序?

Top*_*era 23 sql oracle union select

我有两个选择:

SELECT id FROM a -- returns 1,4,2,3
UNION
SELECT id FROM b -- returns 2,1
Run Code Online (Sandbox Code Playgroud)

我收到了正确的行数,如:1,4,2,3.

但我b首先想要表格结果:2,1,4,3或者2,1,3,4

我怎样才能做到这一点?

(我正在使用Oracle)

Adr*_*iro 28

你想这样做:

select * from 
(
    SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
    UNION
    SELECT id, 1 as ordered FROM b -- returns 2,1
)
order by ordered
Run Code Online (Sandbox Code Playgroud)

更新

我注意到,即使您有两个不同的表,也可以加入ID,这意味着,如果您1在两个表中都有,则只会出现一次.如果这是理想的行为,你应该坚持下去UNION.如果没有,请改为UNION ALL.

所以,我也注意到,如果你改变我提出的代码,你会开始得到双方12(来自ab).在这种情况下,您可能希望将建议的代码更改为:

select distinct id from 
(
    SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
    UNION
    SELECT id, 1 as ordered FROM b -- returns 2,1
)
order by ordered
Run Code Online (Sandbox Code Playgroud)


Top*_*era 5

使用@Adrian提示,我找到了一个解决方案:

我正在使用GROUP BYCOUNT.我尝试使用带有ORDER BY的DISTINCT,但我收到错误消息:"不是SELECTed表达式"

select id from 
(
    SELECT id FROM a -- returns 1,4,2,3
    UNION ALL -- changed to ALL
    SELECT id FROM b -- returns 2,1
)
GROUP BY id ORDER BY count(id);
Run Code Online (Sandbox Code Playgroud)

感谢Adrian和这个博客.