PostgreSQL中的数组和IN运算符

时间:2019-03-06 14:18:23

标签: postgresql

我想知道是否有一种方法可以检查当前在子选择中是否可以找到数组中的每个项目。我有以下查询:

SELECT * 
FROM   similarity_values 
WHERE  assemblies[1] IN 
       ( 
              SELECT 200) 
OR     assemblies[2] IN 
       ( 
              SELECT 200)

我正在寻找一个删除OR的方法,而我们只是一个子选择。类似于:

SELECT * FROM similarity_values WHERE assemblies[*] IN (SELECT 200)

2注:

  1. 子选择(SELECT 200)更复杂
  2. assembly数组最多包含15个条目

谢谢, 伊甸园

2 个答案:

答案 0 :(得分:4)

您可以将子选择的结果转换为数组,然后使用“重叠”或“包含”运算符

    <configuration>
      <configSections>
      </configSections>
      <appSettings>
        <add key="IDServizio" value="2" />
        <add key="IDServizio.DataSet" value="10" />
        <add key="IDServizio.Array" value="11" />
      </appSettings>
      <connectionStrings>
        <add name="DBConnString" connectionString="Data Source=xxxx;Initial Catalog=xxxx;Persist Security Info=True;User ID=xxx;Password=xxx;Connect Timeout=50000"/>
      </connectionStrings>
<system.web>
...
</configuration>

where assemblies @> array(select ...) 

两者之间的区别是右侧数组(子选择的结果)返回多个值时的处理方式。 where assemblies && array(select ...) 仅当子选择中的所有值都包含在@>中时才为true。如果找到至少一个值,则assemblies将为true。

如果子选择总是返回准确一行一行,您可以执行以下操作:

&&

答案 1 :(得分:0)

尝试unnest

init_api