我需要交叉两个表,并返回与其中一个表的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
。我怎么能这样做?
答案 0 :(得分:1)
使用您的查询(没有where
子句),您会得到null
和null
的{{1}}行。您希望匹配特定的client_booking_id
,同时保留所有包含client_booking_id
值的记录,因此您需要将特定null
的其他条件添加到client_booking_id
。
将条件移至left join
:
left join