首页 > 解决方案 > Postgresl:循环值列表以使用多个 WHERE 子句创建 SELECT

问题描述

我有一个简单的 SQL 查询,例如

SELECT * from tableName
WHERE (field = 'value1') OR (field = 'value2') OR (field = 'value3') ...

我懒得写硬代码写上面的 SQL 查询。我想在数组(或任何集合)中提取 value1, value2 , ...

如何编写上面的查询以便它可以循环值列表?

# declare array

# loop for each element in the array
SELECT * from tableName WHERE (field = element) 

# or even better
# build the WHERE clause with a loop
whereClause = (field = 'value1') OR (field = 'value2') OR (field = 'value3') ...

SELECT * from tableName WHERE whereClause

标签: postgresqlwhere-clause

解决方案


正如 a_horse_with_no_name 所提到的,您可以

  1. 检查字段是否在数组中
SELECT *
FROM   tableName 
WHERE  field = ANY(ARRAY['value1', 'value2'])

您可以使用您选择的语言来动态填充这些值

  1. 或者如果这些值已经在表中,您可以
SELECT * 
FROM   tableName
WHERE  field IN (SELECT field FROM otherTableName) 

推荐阅读