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()