簡體   English   中英

使用LIKE對數組進行Postgres查詢

[英]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_waysplanet_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM