PL SQL - 多列相等
PL SQL - Multiple column equality
我正在尝试评估多个列以节省自己的几次击键(当然,在这一点上,搜索的时间和精力早已否定了我曾经收到的任何 "benefit")而不是多个不同的比较。
基本上,我有:
WHERE column1 = column2
AND column2 = column3
我想要:
WHERE column1 = column2 = column3
我找到了另一篇与切线相关的文章:
Oracle SQL Syntax - Check multiple columns for IS NOT NULL
一个可能的技巧是利用 least
and greatest
函数 - 如果值列表中的最大值和最小值相等,则一定意味着所有值都相等:
LEAST(col1, col2, col3) = GREATEST(col1, col2, col3)
我不确定它是否会在三列列表中保存任何击键,但如果您有很多列,它可以保存一些字符。请注意,此解决方案隐式假定 none 的值是 null
,但您的原始解决方案也是如此,因此应该没问题。
使用:
x=all(y,z)
而不是
x=y and y=z
以上节省了 1 次击键(1/11 = 9% - 不多)。
如果列名更长,则可以节省更多:
这是 35 个字符长:
column1=column2 AND column2=column3
而这个只有28
column1=ALL(column2,column3)
但是对于这个(95 个字符):
column1=column2 AND column2=column3 AND column3=column4
AND column4=column5 AND column5=column6
您将获得 43/95 = 将近 50% 的节省
column1=all(column2,column3,column4,column5,column6)
ALL
运算符是 ANSII SQL 的一部分,大多数数据库都支持它(Mysql、Postgresql、SQLServer 等
http://www.w3resource.com/sql/special-operators/sql_all.php
展示其工作原理的简单测试用例:
create table t( x int, y int, z int );
insert all
into t values( 1,1,1)
into t values(1,2,2)
into t values(1,1,2)
into t values(1,2,1)
select 1 from dual;
select *
from t
where x = all(y,z);
X Y Z
---------- ---------- ----------
1 1 1
我正在尝试评估多个列以节省自己的几次击键(当然,在这一点上,搜索的时间和精力早已否定了我曾经收到的任何 "benefit")而不是多个不同的比较。
基本上,我有:
WHERE column1 = column2
AND column2 = column3
我想要:
WHERE column1 = column2 = column3
我找到了另一篇与切线相关的文章: Oracle SQL Syntax - Check multiple columns for IS NOT NULL
一个可能的技巧是利用 least
and greatest
函数 - 如果值列表中的最大值和最小值相等,则一定意味着所有值都相等:
LEAST(col1, col2, col3) = GREATEST(col1, col2, col3)
我不确定它是否会在三列列表中保存任何击键,但如果您有很多列,它可以保存一些字符。请注意,此解决方案隐式假定 none 的值是 null
,但您的原始解决方案也是如此,因此应该没问题。
使用:
x=all(y,z)
而不是
x=y and y=z
以上节省了 1 次击键(1/11 = 9% - 不多)。
如果列名更长,则可以节省更多:
这是 35 个字符长:
column1=column2 AND column2=column3
而这个只有28
column1=ALL(column2,column3)
但是对于这个(95 个字符):
column1=column2 AND column2=column3 AND column3=column4
AND column4=column5 AND column5=column6
您将获得 43/95 = 将近 50% 的节省
column1=all(column2,column3,column4,column5,column6)
ALL
运算符是 ANSII SQL 的一部分,大多数数据库都支持它(Mysql、Postgresql、SQLServer 等
http://www.w3resource.com/sql/special-operators/sql_all.php
展示其工作原理的简单测试用例:
create table t( x int, y int, z int );
insert all
into t values( 1,1,1)
into t values(1,2,2)
into t values(1,1,2)
into t values(1,2,1)
select 1 from dual;
select *
from t
where x = all(y,z);
X Y Z
---------- ---------- ----------
1 1 1