SELECT employee.name, employee.type, employee.rate, work.overtime, work.leaves, work.ticket
FROM employee
LEFT JOIN work on employee.name=work.name
AND work.date between :date1 and :date2
WHERE employee.type=:type_emp
Есть 2 проблемы в оригинальной
- в котором условия оговорка на левой присоединился таблице принудительно эквивалент внутреннего соединения, так если между датами нет работы, ничего не отображается вообще. Чтобы исправить это, переместите фильтрацию даты в «условие соединения», а не в предложении where
- предложение о предложениях не является заменой предложения where; предложение предложения предназначено для фильтрации по агрегированным значениям, возникающим из предложения group by. Чтобы исправить это, просто используйте предложение where.
Существует еще одна потенциальная проблема в том, что между ними не лучший способ фильтровать диапазоны дат, вместо этого следующий подход часто лучше. НО: date2 становится «на следующий день» из того, что вы используете сейчас.
SELECT employee.name, employee.type, employee.rate, work.overtime, work.leaves, work.ticket
FROM employee
LEFT JOIN work on employee.name=work.name
AND work.date >= :date1 AND work.date < :date2
WHERE employee.type=:type_emp
какая ошибка вы получаете? – Asad