mar*_*kus 20 sql union sql-order-by
我怎样才能确定我的结果集有a第一个和b第二个?这将有助于我解决一个棘手的订购问题.
这是我正在做的简化示例:
SELECT a FROM A LIMIT 1
UNION
SELECT b FROM B LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 35
SELECT col
FROM
(
SELECT a col, 0 ordinal FROM A LIMIT 1
UNION ALL
SELECT b, 1 FROM B LIMIT 1
) t
ORDER BY ordinal
Run Code Online (Sandbox Code Playgroud)
Dan*_*ana 21
我不认为订单是保证的,至少不是所有DBMS.
我过去为控制UNION中的顺序所做的是:
(SELECT a, 0 AS Foo FROM A LIMIT 1)
UNION
(SELECT b, 1 AS Foo FROM B LIMIT 1)
ORDER BY Foo
Run Code Online (Sandbox Code Playgroud)
您的结果集UNION将消除不同的值。
我在文档中找不到任何证据,但从10多年的经验来看,我可以看出这UNION ALL确实保留了顺序,至少在Oracle.
但是,如果您正在建造核电站或类似的设施,请不要依赖于此。