2011-08-28 103 views
10

我在使用psql查詢Postgres中的數據庫。我用下面的查詢來搜索一個名爲標籤領域具有文本的數組作爲它的數據類型:Postgres使用LIKE查詢數組

select count(*) from planet_osm_ways where 'highway' = ANY(tags); 

我現在需要創建一個查詢,搜索標籤領域的任何單詞開始與字母'A'。我嘗試了以下內容:

select count(*) from planet_osm_ways where 'A%' LIKE ANY(tags); 

這給了我一個語法錯誤。有關如何使用LIKE與文本數組的任何建議?

回答

15

使用unnest()功能轉換陣列組的列:

SELECT count(distinct id) 
FROM (
    SELECT id, unnest(tags) tag 
    FROM planet_osm_ways) x 
WHERE tag LIKE 'A%' 

count(dictinct id)應從planet_osm_ways表計數的唯一條目,只需用你的主鍵的名稱替換id。這就是說,您應該真的考慮將標籤存儲在單獨的表格中,並與planet_osm_ways建立多對一的關係,或者爲與planet_osm_ways具有多對多關係的標籤創建單獨的表格。現在,您存儲標籤的方式使得在搜索標籤時無法使用索引,這意味着每個搜索都會執行全表掃描。