PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi cela fonctionne-t-il différemment avec ~~ any() ?

Le problème est que le résultat de votre sous-requête est interprété comme une chaîne et non comme un tableau. En effet, ces deux formes sont sémantiquement différentes :

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

et

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

Vous pouvez donc simplement écrire :

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