В чем разница между оператором '=' и LIKE, когда не используются подстановочные знаки - PullRequest
4 голосов
/ 25 августа 2011

Я задаю этот вопрос, потому что не могу найти вопрос по той же причине.Причина в том, что когда я использую LIKE, я получаю ПОСЛЕДОВАТЕЛЬНЫЕ РЕЗУЛЬТАТЫ, а когда я использую оператор (=), я получаю НЕПРАВИЛЬНЫЕ РЕЗУЛЬТАТЫ.

ДЕЛО
У меня БОЛЬШОЙ ВИД(viewX) с несколькими внутренними объединениями и левыми объединениями, где некоторые столбцы имеют нулевые значения, потому что определение базы данных допускает это.

  1. Когда я открываю этот VIEW, я вижу, например: 8 строк в результате.
  2. Когда я запускаю, например: select * from viewX where column_int = 34 and type_string = 'xyz', этот запрос показывает мне 100 строк, которые не определены в результате просмотра.[INCONSISTENT]

НО

  1. Когда я запускаю select * from viewX where column_int = 34 and type_string like 'xyz', этот запрос показывает мне только 4 строки, которые определены в представлении при открытии (см. 1.) [ПОСТОЯННО]

Кто-нибудь задумывается о том, что здесь происходит?

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

В соответствии с документацией MySQL LIKE функционирует иначе, чем =, особенно если у вас есть пробелы в конце или в начале.

Вам необходимо опубликовать фактический запрос, но я предполагаю, что он связан с известными отклонениями.

2 голосов
/ 25 августа 2011

Из документации .....

'В соответствии со стандартом SQL, LIKE выполняет сопоставление для каждого символа, поэтому может давать результаты, отличные от оператора сравнения =:'

что более важно (при использовании LIKE):

' сравнения строк не чувствительны к регистру, если только один из операндов не является двоичной строкой '

из: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

...