Postgres 9.3以降では、LATERAL
を使用します 参加:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
これは暗黙のLATERAL
加入。 unnest()
の場合 行を返しません(空またはNULLのsubject
)、結果はまったく行になりません。 LEFT JOIN unnest(...) i ON true
を使用します 常にtbl
から行を返す 。参照:
- LATERAL JOINとPostgreSQLのサブクエリの違いは何ですか?
regexp_split_to_table()
を使用することもできます 、ただし、正規表現のマッチングには少しコストがかかるため、通常は遅くなります。関連:
- テキストフィールドに部分文字列を含む行をSQLで選択
- 要素番号付きのPostgreSQLunnest()