(A!= B!= C)是否与Oracle中的(A!= B或A!= C或B!= C)相同

The*_*der 1 oracle

我想在某些语言中做:

(A1 != A2 != A3)
Run Code Online (Sandbox Code Playgroud)

是一样的:

(A1 != A2 or A1!= A3 or A3 != A2) 
Run Code Online (Sandbox Code Playgroud)

在Oracle中也是如此吗?或者,有没有其他方法可以实现这一点,而不是重复?

Mar*_*ber 6

在Oracle的建设a1 != a2 != a3不是一个有效的谓词

 select * from tst where a1 != a2 != a3;
Run Code Online (Sandbox Code Playgroud)

 ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)

请参阅比较条件的Oracle语法

可以做的(以及在SQL中使用的IMO是什么)是组比较条件

a1 != ANY (a2,a3) 如果表达式对于列表的至少一个元素为TRUE,则返回TRUE

a1 != ALL (a2,a3) 如果列表的所有元素的表达式为TRUE,则返回TRUE

这里简单的例子

select * from tst order by a1,a2,a3;

        A1         A2         A3
---------- ---------- ----------
         1          1          1 
         1          1          2 
         1          2          1 
         1          2          2 

select * from tst where  a1 != ANY (a2,a3)  order by a1,a2,a3;

        A1         A2         A3
---------- ---------- ----------
         1          1          2 
         1          2          1 
         1          2          2 


select * from tst where  a1 != ALL (a2,a3)  order by a1,a2,a3;

        A1         A2         A3
---------- ---------- ----------
         1          2          2 
Run Code Online (Sandbox Code Playgroud)

罕见使用的原因是IMO在这些表达式的非常直观的外观中.Explizite组合使用ANDORIMO更直观.