使用MINUS的意外行为 - Oracle 11g

时间:2017-02-13 07:59:18

标签: oracle oracle11g

我有一个如下查询(Query1)

SELECT COLUMN1,COLUMN2,COLUMN3 ,COLUMN4
FROM (SELECT COLUMN1,COLUMN2,COLUMN3,COLUMN4 
       FROM TABLE1 join TABLE3 ON JOINCONDITION 
        LEFT JOIN TABLE4 ON JOINCONDITION2
       UNION ALL 
       SELECT COLUMN5,COLUMN2,COLUMN3,COLUMN6
       FROM TABLE5 join TABLE3 ON JOINCONDITION 
        LEFT JOIN TABLE4 ON JOINCONDITION3
       )

我优化了上面的查询并派生了以下查询(Query2)

SELECT CASE CONDITION... COLUMN1,COLUMN2,COLUMN3,CASE CONDITION.. AS COLUMN4
FROM (SELECT COLUMN2,COLUMN3
       FROM TABLE1
       UNION ALL 
       SELECT COLUMN2,COLUMN3
       FROM TABLE5 )
 JOIN TABLE3 ON JOINCONDITION
 LEFT JOIN TABLE4 ON JOINCONDITION2
 LEFT JOIN TABLE5 ON JOINCONDITION3

COLUMN3 - DATE数据类型

COLUMN2 - USERIDs

要验证新查询(Query2),我尝试使用MINUS运算符执行这两个查询,如下所示

QUERY3:

QUERY1 WHERE COLUMN2 BETWEEN 17150 AND 20000
MINUS
QUERY2 WHERE COLUMN2 BETWEEN 17150 AND 20000

这导致5行,COLUMN2 = 17480。然后我试了

QUERY4:

QUERY2 WHERE COLUMN2 BETWEEN 17150 AND 20000
MINUS
QUERY1 WHERE COLUMN2 BETWEEN 17150 AND 20000

我得到相同的5行相同的值。所有列都在QUERY3和QUERY4之间完全匹配。 COLUMN3也有相同的日期和时间。 QUERY3和QUERY4之间的时间值(从年到秒)。

然后我尝试直接给出值,如下所示。此查询不返回任何内容

QUERY1
WHERE COLUMN2 =17480
MINUS
QUERY2
WHERE COLUMN2 =17480

即使我在MINUS运算符之间交换QUERY1和QUERY2的位置,也没有结果。 还有一点需要注意的是,即使我缩小了QUERY3和QUERY4中BETWEEN子句的范围,也没有结果。

关于这个问题的任何想法?

0 个答案:

没有答案