Разница между этими двумя запросами MySQL? - PullRequest
3 голосов
/ 22 июня 2011

Я думал, что эти два запроса были одинаковыми.Но результаты показали, что ограничения первого запроса начинаются с четырех отработанных AND, возвращается много неправильных строк с левым соединением.Результаты второго запроса выглядят как правильные.Кто-нибудь может объяснить, в чем разница между этими двумя запросами?этот вопрос похож на на этот , но я на 100% уверен, что результаты будут другими.*

       SELECT uinfo.serial_number, uinfo.firmware, upd.objtype, upd.category
       FROM UnitInfo uinfo
       INNER JOIN 
       UnitUpdateInfo upd
       ON uinfo.serial_number = upd.serial_number
       WHERE substring(uinfo.serial_number,1,2) NOT IN ('AB','CD','EF','GH')  
       AND substring(uinfo.serial_number,1,1) NOT LIKE 'M%'
       AND upd.objtype ='HEEN' 
       AND TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(uinfo.firmware, '-', -2), '-', 1)) LIKE '3.0%'

1 Ответ

2 голосов
/ 22 июня 2011

Как только правая таблица в LEFT JOIN имеет сравниваемые поля, например, для равенства в предложении WHERE, она фактически становится INNER JOIN - в вашем запросе вы заставляете objtypeполе UnitUpdateInfo должно быть ненулевым => соединение должно быть успешным.

Первый запрос со всей логикой соединения как частью LEFT JOIN будет включать все строки из первой таблицы, к которой присоединеноэти строки из второй таблицы - с пустыми значениями для полей второй таблицы, где объединение было невозможно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...