Dans Postgres 9.3+, utilisez un LATERAL
rejoindre :
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
C'est un LATERAL
implicite rejoindre. Si unnest()
ne renvoie aucune ligne (vide ou NULL subject
), le résultat sera aucune ligne du tout. Utilisez LEFT JOIN unnest(...) i ON true
pour toujours renvoyer les lignes de tbl
. Voir :
- Quelle est la différence entre LATERAL JOIN et une sous-requête dans PostgreSQL ?
Vous pouvez également utiliser regexp_split_to_table()
, mais cela est généralement plus lent car la correspondance des expressions régulières coûte un peu plus cher. Connexe :
- SQL sélectionne les lignes contenant une sous-chaîne dans le champ de texte
- PostgreSQL unnest() avec le numéro d'élément