[英]Postgres Query of an Array using LIKE
我正在使用psql查詢Postgres中的數據庫。 我使用以下查詢來搜索名為tags的字段,該字段具有文本數組作為其數據類型:
select count(*) from planet_osm_ways where 'highway' = ANY(tags);
我現在需要創建一個查詢,在標簽字段中搜索以字母“A”開頭的任何單詞。 我嘗試了以下方法:
select count(*) from planet_osm_ways where 'A%' LIKE ANY(tags);
這給了我一個語法錯誤。 有關如何使用LIKE與文本數組的任何建議?
使用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
關系,或者為與planet_osm_ways
多對多關系的標簽創建一個單獨的表。 現在存儲標簽的方式使得在搜索標簽時無法使用索引,這意味着每次搜索都會執行全表掃描。
這是在WHERE
子句中執行此操作的另一種方法:
SELECT COUNT(*)
FROM planet_osm_ways
WHERE (
0 < (
SELECT COUNT(*)
FROM unnest(planet_osm_ways) AS planet_osm_way
WHERE planet_osm_way LIKE 'A%'
)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.