您必须使用order by
才能按您想要的顺序获得结果。当没有 时,SQL 表和 SQL 结果本质上是无序的order by
,除了一些特定于数据库的例外情况(例如,MySQL 保证使用时的排序group by
)。
UNION
并且UNION ALL
不保证结果的顺序。事实上,在许多数据库中,UNION
将按字母顺序(按第一列)返回结果作为重复删除过程的一部分。
您可以将 替换UNION
为UNION ALL
。尽管不能保证以特定顺序返回结果,但通常会按以下顺序返回结果:
SELECT R.NUMERIC_VAL, 'A' /* query A */
FROM TABLE_1
WHERE TABLE_1.DATE = TO_DATE('04/04/2012', 'DD/MM/YYYY')
UNION ALL
SELECT E.NUMBER_VALUE, 'B' /* query B */
FROM TABLE_2
WHERE TABLE_2.DATE = TO_DATE('05/04/2012', 'DD/MM/YYYY')
UNION ALL
SELECT E.OTHER_NUMBER_VALUE, 'C' /* query C */
FROM TABLE_2
WHERE TABLE_2.DATE = TO_DATE('05/04/2012', 'DD/MM/YYYY')
但是,我建议您保留ORDER BY
.
如果您不想要第二列,请使用子查询:
select NUMERIC_VAL
from (SELECT R.NUMERIC_VAL, 'A' as ordering /* query A */
FROM TABLE_1
WHERE TABLE_1.DATE = TO_DATE('04/04/2012', 'DD/MM/YYYY')
UNION ALL
SELECT E.NUMBER_VALUE, 'B' /* query B */
FROM TABLE_2
WHERE TABLE_2.DATE = TO_DATE('05/04/2012', 'DD/MM/YYYY')
UNION ALL
SELECT E.OTHER_NUMBER_VALUE, 'C' /* query C */
FROM TABLE_2
WHERE TABLE_2.DATE = TO_DATE('05/04/2012', 'DD/MM/YYYY')
) t
ORDER BY ordering;