查询数组元素的值(PostgreSQL)

Sab*_*lfy 10 arrays postgresql postgresql-8.4

以下查询:

select unnest(Table2.L) as X, unnest(Table1.O) 
from Table1, Table2 
where Table1.code = Table2.code 
order by X ;
Run Code Online (Sandbox Code Playgroud)

产生预期的结果.但是,我想排除(未使用的)与某些值匹配的行.向查询添加条件,例如:

and unnest(Table2.L) != '-'
Run Code Online (Sandbox Code Playgroud)

显然不起作用.这可能吗?怎么样?

mu *_*ort 8

如果是unnest(Table2.L) != '-'你的意思

抛弃所有未经证实的元素 '-'

然后使用派生表并过滤掉您不想要的unnested值:

select *
from (
    select unnest(Table2.L) as X, unnest(Table1.O) 
    from Table1 join Table2 on Table1.code = Table2.code
) dt
where X != '-'
order by X ;
Run Code Online (Sandbox Code Playgroud)

如果你的意思是

忽略Table2其中L包含的所有行'-'

然后你可以使用@>运算符来检查是否L包含某个元素:

select unnest(Table2.L) as X, unnest(Table1.O)
from Table1 join Table2 on Table1.code = Table2.code
where not Table1.L @> ARRAY['-']
Run Code Online (Sandbox Code Playgroud)

或者您可以使用任何:

select unnest(Table2.L) as X, unnest(Table1.O)
from Table1 join Table2 on Table1.code = Table2.code
where not '-' = any(Table1.L)
Run Code Online (Sandbox Code Playgroud)

通过忘记隐式连接存在来帮助自己,总是使用显式连接条件.