sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför fungerar det annorlunda med ~~ any()?

Problemet är att resultatet av din underfråga tolkas som en sträng, inte en array. Detta beror på att dessa två former är semantiskt olika:

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

och

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

Så du kan helt enkelt skriva:

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



  1. Jämför strängar i PHP på samma sätt som MySQL gör

  2. Konstigt beteende hos gruppen av i fråga som behöver optimeras

  3. kolumnen inte null uppskjuten

  4. Hur väljer man över två tabeller?