Vấn đề là kết quả của truy vấn con của bạn được hiểu là một chuỗi, không phải một mảng. Điều này là do hai dạng này khác nhau về ngữ nghĩa:
~~ ANY ('...') -- will be interpreted as an array literal
và
~~ ANY (SELECT ...) -- will compare with all query results in turn
Vì vậy, bạn có thể chỉ cần viết:
WHERE lower(name) ~~ ANY
(SELECT DISTINCT '%' || lower(brand) || '%'
FROM my_table
WHERE source = 'Orig')