作者:叶葳蕤1095190287 | 来源:互联网 | 2022-12-02 12:27
我正在尝试编写一个类似这样的查询:
SELECT * FROM table WHERE
(a, b) in ((23, [1]), (20, [0]), (17, [-1, 0, 1]), (55, [-1, 0]);
结果集将是(假设项目存在!):
23, 1
20, 0
17, -1 (could have also been 17, 0 or 17,1)
55, -1 (could have also been 55, 0)
也就是说,设置项类似于OR子句."我们坚持认为(a,b)包括(23,1)和(20,0),但17可以是-1,0或1." 那有意义吗?
这样的事情可能吗?
1> Lukasz Szozd..:
你可以使用= ANY
:
WITH cte(i, list) AS (
VALUES (23, ARRAY[1]),(20, ARRAY[0]),(17, ARRAY[-1,0,1]), (55, ARRAY[-1, 0])
)
SELECT t.*
FROM tab t
JOIN cte c ON t.a = c.i AND t.b = ANY(list);
db <>小提琴演示