Trong Postgres 9.3+ sử dụng LATERAL
tham gia:
SELECT s.token, flag
FROM tbl t, unnest(string_to_array(t.subject, ' ')) s(token)
WHERE flag = 2;
Đó là một LATERAL
ngầm hiểu tham gia. If unnest()
không trả về bất kỳ hàng nào (trống hoặc NULL subject
), kết quả sẽ không có hàng nào cả. Sử dụng LEFT JOIN unnest(...) i ON true
để luôn trả về các hàng từ tbl
. Xem:
- Sự khác biệt giữa LATERAL JOIN và một truy vấn con trong PostgreSQL là gì?
Bạn cũng có thể sử dụng regexp_split_to_table()
, nhưng điều đó thường chậm hơn vì so khớp biểu thức chính quy tốn nhiều hơn một chút. Có liên quan:
- SQL chọn các hàng có chứa chuỗi con trong trường văn bản
- PostgreSQL unnest () với số phần tử