在两列上检查相同的长条件

Joh*_*ohn 11 sql postgresql

我有两列XY一个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语法,但它澄清了这个问题.

注意:数字代表状态,这种情况背后没有数学逻辑.

Nic*_*nes 9

前提是你并不需要它在使用索引x或者y,最简单的方法可能是:

...WHERE ARRAY[x,y] <@ ARRAY[0,1,4,6,7]
Run Code Online (Sandbox Code Playgroud)


Dan*_*ité 6

您可以将值放入数组中,将数组放入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)