加入表保持空结果

时间:2016-01-16 15:28:31

标签: mysql sql join

我需要交叉两个表,并返回与其中一个表的ID相同的结果。

第一个是角色/任务表:

id | rolename
---+---------
1  | check_in
2  | cleaning
3  | taxi
4  | guide
5  | car_rental
6  | meals
7  | house_owner
20 | custom

和另一个包含列的表:

id | client_booking_id | staff_role_id | confirmed | staff_cost

我需要一个总是在第一个表中给出与nr列一样多的结果的查询。因为对于每个唯一client_booking_id,这些任务/角色中只有一个(如果有的话)。

所以,如果我这样做:

SELECT sr.role_name, sr.id, ss.staff_cost, ss.confirmed 
    FROM staff_role AS sr
    LEFT JOIN staff_schedule AS ss ON sr.id=ss.staff_role_id

我得到的结果是我想要的nr行。现在我需要将它与特定的client_booking_id匹配,所以我做了

SELECT sr.role_name, sr.id, ss.staff_cost, ss.confirmed 
    FROM staff_role AS sr
    LEFT JOIN staff_schedule AS ss ON sr.id=ss.staff_role_id
    WHERE ss.client_booking_id=1551 // <-- this is the new line

这只给了我2个结果,因为在第二个表中我只预订了2个任务id

但我需要一个包含所有任务的结果,即使是那些不匹配的任务,其值为NULL。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

使用您的查询(没有where子句),您会得到nullnull的{​​{1}}行。您希望匹配特定的client_booking_id,同时保留所有包含client_booking_id值的记录,因此您需要将特定null的其他条件添加到client_booking_id

将条件移至left join

left join
相关问题