Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

diferença entre where_in e find_in_set


WHERE IN requer que o conjunto de valores seja especificado literalmente na consulta, não como um único valor contendo uma string delimitada por vírgulas. Se você escrever:
WHERE 6 IN (a.allowed_activity)

ele tratará a.allowed_activity como um único valor e compare-o com 6 , não como um conjunto de vários valores a serem pesquisados.

FIND_IN_SET pesquisa uma string delimitada por vírgulas para o valor.

Outra maneira de visualizá-lo é que IN é um atalho para vários = testes combinados com OR :
WHERE x IN (a, b, c, d)

é curto para
WHERE x = a OR x = b OR x = c OR x = d

Ao reescrevê-lo assim, você pode ver claramente por que ele não funcionará com uma coluna contendo uma string delimitada por vírgulas. Simplesmente traduz
WHERE 6 IN (a.allowed_activity) 

para:
WHERE 6 = a.allowed_activity