当没有匹配时,MySQL显示空记录

时间:2014-03-03 21:03:25

标签: php mysql sql

我有一些LEFT JOIN的查询。我试图让其中一个在一个子句不匹配时显示NULL匹配。

SELECT *, sr.id as role_id, ss.id as scheduled_entry_id
FROM T_STAFF_ROLE AS sr
LEFT JOIN T_STAFF_SCHEDULE AS ss
ON sr.id = ss.staff_role_id
LEFT JOIN T_BOOKINGS_ADMIN AS ba
ON ba.id = ss.admin_user_id
AND ss.client_booking_id='12495' // unreal id
ORDER BY sr.id 

我希望始终显示T_STAFF_ROLE个条目 如果此处有匹配项ss.client_booking_id=".$id_booking.'显示,则返回包含NULL值的字段。

我尝试使用AND(就像现在一样),但随后我也会使用其他ss.client_booking_id获得所有结果。

尝试WHERE,但如果没有匹配,我就什么也得不到。我想在sr上每行仍然有一个条目。我认为那是“LEFT”JOIN的重点

我的逻辑或代码在哪里错了?

我呈现的查询:

SELECT *, sr.id as role_id, ss.id as scheduled_entry_id 
FROM staff_role AS sr 
LEFT JOIN staff_schedule AS ss ON sr.id = ss.staff_role_id 
LEFT JOIN admin_users AS ba ON ba.id = ss.admin_user_id 
AND ss.client_booking_id=336 ORDER BY sr.id

我的sr有9行,已修复。不同的角色,如出租车,清洁工,导游。 ss是某个角色/人的预订。我在PHP上使用此查询来生成HTML,并希望它为所有“角色”生成数据,以防其中一些不匹配。

1 个答案:

答案 0 :(得分:1)

条件AND ss.client_booking_id=".$id_booking.'位于错误的位置。它应该是T_STAFF_SCHEDULE加入的一部分。在当前查询中,您获得与sr.id匹配的所有T_STAFF_SCHEDULE,以及当其父T_BOOKINGS_ADMIN任何匹配T_STAFF_SCHEDULE时的所有$id_booking

好吧,我不知道每个列和表的含义,但我认为它应该是这样的:

 "SELECT *, sr.id as role_id, ss.id as scheduled_entry_id
    FROM ".T_STAFF_ROLE." AS sr
    LEFT JOIN ".T_STAFF_SCHEDULE." AS ss
    ON sr.id = ss.staff_role_id
    AND ss.client_booking_id=".$id_booking."
    LEFT JOIN ".T_BOOKINGS_ADMIN." AS ba
    ON ba.id = ss.admin_user_id
    ORDER BY sr.id";