MySQL Где предложение IN возвращает другой результат - PullRequest
0 голосов
/ 11 марта 2020

Я новичок в MySQL, я хотел бы понять, как работает предложение IN.

В MySQL, когда я пытаюсь использовать предложение IN как таковое:

Select *
From `table`
WHERE `code` IN (1,2)

Работает и возвращает запись

Select *
From `table`
WHERE `code` IN (3)

Не работает.

Значение столбца в БД:

-----------------
|    `code`     |
|    1,3,2      |
-----------------

des c: code УАКСНАК (100)

1 Ответ

3 голосов
/ 11 марта 2020

Когда строка сравнивается с числом, строка преобразуется в число. Итак, это:

SELECT '1,3,2' IN (1, 2) -- true

Вынудит MySQL преобразовать 1,3,2 в 1; он анализирует 1 и игнорирует все после запятой. Вы можете подтвердить это поведение, переупорядочив значения, и оно больше не будет соответствовать:

SELECT '3,1,2' IN (1, 2) -- false

Решение hacki sh состоит в следующем:

WHERE CONCAT(',', code, ',') LIKE '%,1,%'
   OR CONCAT(',', code, ',') LIKE '%,2,%'

Но правильное решение - хранить значения, разделенные запятыми, как отдельные строки.

...