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.
所以,我也注意到,如果你改变我提出的代码,你会开始得到双方1和2(来自a和b).在这种情况下,您可能希望将建议的代码更改为:
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)
使用@Adrian提示,我找到了一个解决方案:
我正在使用GROUP BY和COUNT.我尝试使用带有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和这个博客.