6

IN 関数で ILIKE を使用してクエリを実行することは可能ですか? 例えば:

SELECT store_names
FROM stores
WHERE states ILIKE IN (SELECT location
                       FROM   locations
                       WHERE  stateID = 1)

ILIKE 関数を使用して、ネストされたクエリから返された結果を実行したいと考えています。これを行う方法はありますか?

4

1 に答える 1

5

あなたは必要以上にもう1つの角を考えています。より簡単にすることができます:

SELECT s.store_names, l.location
FROM   stores s
JOIN   (
   SELECT location
   FROM   locations
   WHERE  stateid = 1
   ) l ON s.states ILIKE l.location

パフォーマンスを向上させるためにサブセレクトのみを使用します。クエリプランナーがこの単純なクエリ(およびPostgresのバージョン)で同じプランを使用するのに十分賢いかどうかはわかりません。

SELECT s.store_names, l.location
FROM   stores s
JOIN   locations l ON s.states ILIKE l.location
WHERE  l.stateid = 1

たぶん、あなたは(で)試しEXPLAIN ANALYZEて、彼らが同じ計画を使用しているかどうか(そして同じことを実行しているかどうか)を報告することができますか?

そして、私はあなたが実際に%あなたの目的のために追加する必要があると思います:

... ON s.states ILIKE ('%' || l.location || '%')
于 2012-10-10T23:24:48.637 に答える