首页 > 解决方案 > postgres:选择参数为任何内容的行

问题描述

我在 WHERE 子句的查询中传递参数。我想创建一个案例,其中 where 中的任何参数都可以(例如忽略该值)。

例如:

SELECT * FROM USERS WHERE lang=%s

我可以传入占位符字符串,例如“en”、“it”、“es”。但是如果我想在 lang 列中获取所有内容呢?就像我没有在 where 子句中提到 lang 一样?

有没有类似的东西:

SELECT * FROM USERS WHERE lang=ANYTHING

??

标签: sqlpostgresqlwhere

解决方案


您可以将NULL其用作您不关心语言的指标。然后您可以使用IS NULL来检查该值是否为空,因此包括所有行。用于OR附加相等性检查。像这样,如果值不为空,它必须与要返回的行的语言匹配。

SELECT *
       FROM users
       WHERE %s IS NULL
              OR lang = %s;

推荐阅读