sql >> Database >  >> RDS >> Mysql

verschil tussen where_in en find_in_set

WHERE IN vereist dat de reeks waarden letterlijk in de query wordt opgegeven, niet als een enkele waarde die een door komma's gescheiden tekenreeks bevat. Als je schrijft:

WHERE 6 IN (a.allowed_activity)

het behandelt a.allowed_activity als slechts een enkele waarde, en vergelijk deze met 6 , niet als een set van meerdere waarden om te zoeken.

FIND_IN_SET zoekt een door komma's gescheiden tekenreeks voor de waarde.

Een andere manier om het te bekijken is dat IN is een snelkoppeling voor een aantal = tests gecombineerd met OR :

WHERE x IN (a, b, c, d)

is een afkorting voor

WHERE x = a OR x = b OR x = c OR x = d

Als je het op deze manier herschrijft, kun je duidelijk zien waarom het niet werkt met een kolom die een door komma's gescheiden tekenreeks bevat. Het vertaalt eenvoudig

WHERE 6 IN (a.allowed_activity) 

naar:

WHERE 6 = a.allowed_activity


  1. Spring Data @CreatedDate annotatie werkt niet voor mij

  2. Een nummer "unhexen" in MySQL

  3. com.mysql.jdbc.MysqlDataTruncation:Gegevensafbreking:gegevens te lang voor kolom 'column_name'

  4. Een databasetabel partitioneren in MySQL