Я сегодня ошибся в запросе, но он все еще работал и дал ожидаемый результат. Я имел в виду, чтобы запустить этот запрос:INNER JOIN условие в разделе WHERE?
SELECT e.id FROM employees e JOIN users u ON u.email=e.email WHERE u.id='139840'
, но я случайно побежал этот запрос
SELECT e.id FROM employees e JOIN users u ON u.email=e.email AND u.id='139840'
(обратите внимание на AND
вместо WHERE
в последнем пункте)
и оба вернулись правильный идентификатор сотрудника от идентификатора пользователя.
В чем разница между этими двумя запросами? Включает ли вторая форма только члены из 2 таблиц, удовлетворяющих критериям, тогда как первая будет объединена со всей таблицей, а затем запустит запрос? Является ли он более или менее эффективным, чем другой? Это что-то еще, что мне не хватает?
Спасибо!
Оптимизатор запросов, вероятно, рассматривает их как эквивалент, учитывая, что они имеют тот же смысл ... –
Если вы должны были перейти к LEFT OUTER JOIN, тогда только вторая громкая работа «как и ожидалось» – Strawberry
Возможный дубликат [INNER JOIN ON vs WHERE clause] (http://stackoverflow.com/questions/1018822/inner-join-on-vs-where- оговорка) –