sql >> Databasteknik >  >> RDS >> Mysql

skillnaden mellan where_in och find_in_set

WHERE IN kräver att uppsättningen värden anges bokstavligt i frågan, inte som ett enda värde som innehåller en kommaavgränsad sträng. Om du skriver:

WHERE 6 IN (a.allowed_activity)

den kommer att behandla a.allowed_activity som bara ett enda värde, och jämför det med 6 , inte som en uppsättning av flera värden att söka efter.

FIND_IN_SET söker efter värdet i en kommaavgränsad sträng.

Ett annat sätt att se det är att IN är en genväg för ett gäng = tester kombinerade med OR :

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

är förkortning för

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

När du skriver om det så här kan du tydligt se varför det inte fungerar med en kolumn som innehåller en kommaavgränsad sträng. Det översätts helt enkelt

WHERE 6 IN (a.allowed_activity) 

till:

WHERE 6 = a.allowed_activity


  1. Få AVG att ignorera noll- eller nollvärden

  2. Mysql-transaktionsåterställning vid fel i uppdateringen

  3. Hur man ställer in samlingen av en databas i SQL Server (T-SQL)

  4. Hur Floor() fungerar i PostgreSQL