PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché funziona in modo diverso con ~~ any()?

Il problema è che il risultato della tua sottoquery viene interpretato come una stringa, non come un array. Questo perché queste due forme sono semanticamente diverse:

~~ ANY ('...')  -- will be interpreted as an array literal

e

~~ ANY (SELECT ...)  -- will compare with all query results in turn

Quindi puoi semplicemente scrivere:

WHERE lower(name) ~~ ANY
      (SELECT DISTINCT '%' || lower(brand) || '%'
       FROM my_table
       WHERE source = 'Orig')