ответ.
есть два запроса
select * from TABLE_A a left join TABLE_B b on a.pk = b.fk and( a.date_start ≤ b.date and a.date_end ≥ b.date)
select * from TABLE_A a left join TABLE_B b on a.pk = b.fk where a.date_start ≤ b.date and a.date_end ≥ b.date
Что это за мода пошла делать отбор после ON, он же будет не корректный.
И второе, как будет происходить выполнение
Когда ограничение в части ON находиться это относиться только к подключаемой таблицы.
а когда после WHERE это уже касается итоговой выборки. <— Правильное утверждение ?
Спасибо!
> Что это за мода пошла делать отбор после ON, он же будет не корректный. Смотря какой результат нужен... Но второй запрос просто вводит в заблуждение (такое code review не пройдёт ;) ), это да. > Когда ограничение в части ON То это относится к данному JOIN, да.
Спасибо Вам огромное, а чисто случайно не подскажите как правильно спросить у гугла, про этапы выполнения запроса оптимизатором? Хочу понимать что выполняется первым, что последующим. Например select user_id from tbl_1 join tbl2 on tbl_1.id=tbl_2.id where user_id =1 Limit 1 Cначало выполняется соединения таблиц, формируется +/- виртуальная таблица, потом к этой таблице приминяются условия where, после выполняется условия limit... Спасибо!
Что-то вроде "logical sequence of sql query execution", например.
Спасибо) И просто интересно не зачтите за флуд. А на кого вы учились? и сколько времени ушло чтобы так хорошо разбираться в БД ? и что больше читаете или курсы или сертификацию проходите или еще что-то?
1. На программиста. 2. Не помню... несколько лет, кажется. 3. Книги и документацию. И это off topic, наверное. ;)
Это не эквивалентные запросы
Не совсем правильное утверждение, где-то близко к истине, но хромает формулировка
Условие в on использует значения полей ДО join Условие в Where - ПОСЛЕ. Все достаточно просто
Обсуждают сегодня