UNION语句相同的选定值 - 奇怪的行为

时间:2014-08-21 06:46:38

标签: sql oracle union

我在具有相同值的UNIONed select语句中发现了一种非常奇怪的行为。

试图在网上找到发生的事情,但是不知道如何用短语搜索这个问题,需要解释,它如下:

测试1:

SELECT 
        ID, SUM(AMT) AS AMT
    FROM
    (
        SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION
        SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION
        SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION
        SELECT 1 AS ID, 100 AS AMT FROM DUAL
    )
    GROUP BY ID; 

测试2:

SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION
SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION
SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION
SELECT 1 AS ID, 100 AS AMT FROM DUAL;

所有这些select语句都给出了相同的结果:

enter image description here

因此,假设我正在编写一个动态代码,以便在我的某个应用程序中运行时生成并执行,并且恰好代码变为如上所述!如何使这个select语句有效?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用UNION ALL

SELECT 
        ID, SUM(AMT) AS AMT
    FROM
    (
        SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION ALL
        SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION ALL
        SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION ALL
        SELECT 1 AS ID, 100 AS AMT FROM DUAL
    )
    GROUP BY ID; 

答案 1 :(得分:1)

请尝试以下

SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION all

SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION all

SELECT 1 AS ID, 100 AS AMT FROM DUAL UNION all

SELECT 1 AS ID, 100 AS AMT FROM DUAL;