I have MySql query like this:
SELECT name, id_number, hr.id, file, created_at, updated_at From users u LEFT JOIN homework_targets ht on u.class_id = ht.class_id LEFT JOIN homework_replies hr on u.id = hr.user_id WHERE u.role = 'student' AND hr.homework_id = 8
This query work just fine, but not like what I expected. I want to display all the student (users) record is displayed although they don’t have a record on homework_replies that match the homework_targets is it possible? if it possible how can I accomplish it? thanks.
Advertisement
Answer
Move the hr.homework_id condition from WHERE to ON to get true LEFT JOIN result:
SELECT name, id_number, hr.id, file, created_at, updated_at From users u LEFT JOIN homework_targets ht on u.class_id = ht.class_id LEFT JOIN homework_replies hr on u.id = hr.user_id AND hr.homework_id = 8 WHERE u.role = 'student'
(If you have it in the WHERE clause, you’ll get regular INNER JOIN result.)