PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum funktioniert es mit ~~ any() anders?

Das Problem ist, dass das Ergebnis Ihrer Unterabfrage als Zeichenfolge und nicht als Array interpretiert wird. Dies liegt daran, dass sich diese beiden Formen semantisch unterscheiden:

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

und

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

Sie können also einfach schreiben:

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