2017-03-04 80 views
1

的陣列我有一個表T1PostgreSQL的搜索文本的文本

id | names 
----|------------------------- 
1 | {jully , alex , sarah} 
2 | {bety , cate , jenifer} 
3 | {adam , pit , joee} 
4 | {piter , mat , andy} 

所以,我需要行具有與至少啓動一個名爲「一個」 結果我需要的是在下面的

在第1行:亞歷

在第3行:亞當

在4行:安迪

id | names 
-----|------------------------- 
1 | {jully , alex , sarah} 
3 | {adam , pit , joee} 
4 | {piter , mat , andy} 

喜歡它

select * from t1 where 'a' like% any t1.name 

回答

1
select * 
from (
    select id, unnest(names) as name 
    from t 
) s 
where name like 'a%'; 
id | name 
----+------ 
    1 | alex 
    3 | adam 
    4 | andy 

查詢把它彙總:

select id, array_agg(name) 
from (
    select id, unnest(names) as name 
    from t 
) s 
where name like 'a%' 
group by id; 
id | array_agg 
----+----------- 
    4 | {andy} 
    1 | {alex} 
    3 | {adam} 
+0

UNNEST函數又一個解決方案,打破各行分離任何行都包含ow項的行,這意味着我們有12條記錄,而不是4條記錄,有額外的「名稱」,這不是一個解決方案,在我們的數據透視表中,我們有數百萬條記錄 –

+0

感謝clodoaldo,我試過了,因爲我是客人......。因此我將數組項改爲項目的sapparate,我確定它們是唯一的(比如「andy」=>「an」,「dy」),現在我使用數組包含操作數....所以通過這種方法我的問題被賣了......我的經驗;-) –

0

而且使用unnest

select * from t1 
where exists (
    select * from unnest(t1.names) n 
    where n like 'a%')