查找与全部或部分 where 子句条件匹配的行

Man*_*y_G 2 sql postgresql where-clause

如果我有一个 table( widgets),其中包含布尔列,如is_blue、 和is_hard以及一些字符串列,如regionkind

我可以执行如下查询来获取与所有条件匹配的行

select * from widgets 
where is_hard = true
and is_blue = false
and region = 'NYC'
and kind = 'Deluxe';
Run Code Online (Sandbox Code Playgroud)

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

Tru*_*ong 6

您可以使用以下查询。示例查询将返回满足 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) 
Run Code Online (Sandbox Code Playgroud)

  • 这是 Postgres,我们可以将 `where` 子句缩短为: `3 = is_hard::int + is_blue::int + (region = 'NYC')::int + (kind = 'Deluxe)::int` (2认同)