2017-01-24 6 views
2

У меня есть таблица со следующими даннымиПочему MySQL сравнить «IN», как, например

Таблица сделки

trasaction_id 
886 
456 
654_asd 
898_ASDF 

Если я использую это предложение

SELECT trasaction_id from transactions where transaction_id IN (886,654) 

Я ожидаю, что результат be 886,

Но mysq l возвращается 886,654_ASDF

Почему в этом запросе возвращается 654_ASDF?

+0

Какой тип [так в оригинале] столбце 'trasaction_id'? –

+3

''654_asd'' принуждается к int. 'SELECT 654 = '654_asd' == 1' –

ответ

4

Это происходит потому, что transaction_id - это строка, но ваши значения сравнения - это числа. Следовательно, transaction_id преобразуется в число с использованием «бесшумного преобразования». Это означает, что ошибки не сообщаются.

Конвертация на самом деле не используется like. Это происходит путем преобразования ведущих символов строки в число, если они выглядят как число. Последующие символы игнорируются.

Таким образом, просто использовать правильные типы:

SELECT trasaction_id 
FROM transactions 
WHERE transaction_id IN ('886', '654'); 

 Смежные вопросы

  • Нет связанных вопросов^_^