我有两列X和Y一个where语句如下:
WHERE (x=0 or x=1 or x=4 or x=6 or x=7 or x=12 or x=75) and
(y=0 or y=1 or y=4 or y=6 or y=7 or y=12 or y=75)
Run Code Online (Sandbox Code Playgroud)
因为它在同一个表的两列上都是相同的条件,有没有办法缩短它?
有点像x and y are (0 or 1 or 4....)- 它不是PostgreSQL语法,但它澄清了这个问题.
注意:数字代表状态,这种情况背后没有数学逻辑.
前提是你并不需要它在使用索引x或者y,最简单的方法可能是:
...WHERE ARRAY[x,y] <@ ARRAY[0,1,4,6,7]
Run Code Online (Sandbox Code Playgroud)
您可以将值放入数组中,将数组放入CTE中.
假设存在tablename(x int, y int):
with list(arr) as (select array[0,1,4,6,7])
select x,y from list,tablename where x=any(arr) and y=any(arr);
Run Code Online (Sandbox Code Playgroud)