我想在某些语言中做:
(A1 != A2 != A3)
Run Code Online (Sandbox Code Playgroud)
是一样的:
(A1 != A2 or A1!= A3 or A3 != A2)
Run Code Online (Sandbox Code Playgroud)
在Oracle中也是如此吗?或者,有没有其他方法可以实现这一点,而不是重复?
在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组合使用AND和ORIMO更直观.