postgresql 查找与所有或部分where子句条件匹配的行

rseugnpd  于 2023-03-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(137)

如果我有一个表(widgets),其中包含布尔列(如is_blueis_hard)和字符串列(如regionkind)。
我可以执行如下所示的查询来获取与所有条件匹配的行

select * from widgets 
where is_hard = true
and is_blue = false
and region = 'NYC'
and kind = 'Deluxe';

如果我还想找到满足3/4或2/4等条件的小部件,我可以用SQL在一个查询中完成吗?或者我必须在代码中迭代,进行越来越不具体的查询吗?我最熟悉的是Postgres和Ruby。

qnakjoqk

qnakjoqk1#

您可以使用下面的查询。示例查询将返回满足3/4条件的结果。

SELECT *
FROM   widgets
WHERE  3 = (CASE WHEN is_hard = true THEN 1 ELSE 0 END)
         + (CASE WHEN is_blue = false THEN 1 ELSE 0 END)
         + (CASE WHEN region = 'NYC' THEN 1 ELSE 0 END)
         + (CASE WHEN kind = 'Deluxe' THEN 1 ELSE 0 END)

相关问题