如何在没有ORDER BY的情况下在UNION中订购条目?

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)

  • 正确:这里的区别在于它隐藏了序数.'t'为派生表提供了一个名称 - 你可以使用你想要的任何东西,但由于我们没有在其他地方使用它,实际值并不重要.但如果没有东西,它就无法编译. (2认同)

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)


Qua*_*noi 5

您的结果集UNION将消除不同的值。

我在文档中找不到任何证据,但从10多年的经验来看,我可以看出这UNION ALL确实保留了顺序,至少在Oracle.

但是,如果您正在建造核电站或类似的设施,请不要依赖于此。