2011-08-28 8 views
10

私はpsqlを使ってPostgresのデータベースに問い合わせています。私は今、任意の単語の開始のためにタグフィールドを検索するクエリを作成する必要がLIKEを使ったPostgresのクエリ

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)は自分の主キーの名前とidを置き換え、planet_osm_waysテーブルから一意のエントリをカウントする必要があります。

これは、planet_osm_waysと多対1の関係を持つ別のテーブルにタグを格納することや、planet_osm_waysと多対多の関係を持つタグ用に別のテーブルを作成することです。タグを保存する方法によって、タグの検索中にインデックスを使用することが不可能になります。これは、各検索が完全なテーブルスキャンを実行することを意味します。

関連する問題