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)
显然不起作用.这可能吗?怎么样?
如果是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)
通过忘记隐式连接存在来帮助自己,总是使用显式连接条件.