我的 MySql
数据库中有三个表:
车辆
- Id_vehicle_pk( int,自增,pk)
- id_driver_fk(varchar,fk,可为空)
用户
- Id_user_pk(varchar,pk)
- 邮件(varchar)
合作者
- Id_coll_pk(int,pk)
- Id_user_fk(varchar,fk)
- 名字(varchar)
- 姓氏(varchar)
我想创建一个连接这三个表的 View ,所以我尝试这个
select Id_vehicle_pk, id_driver_fk,mail, Id_coll_pk, First_Name,Last_Name
from
Vehicle join User join
Collaborator
where
`Vehicle`.`id_driver_fk` = `User`.`Id_user_pk`
and `Collaborator`.`Id_user_fk` = `User`.`Id_user_pk`
group by Id_vehicle_pk
Having Id_vehicle_pk> 0
但是由于 id_driver_fk
的空值导致我得到错误的结果。所以我需要知道:
- 如何解决我的查询?
最佳答案
我认为您正在寻找 LEFT JOIN
子句,即使没有与其他表匹配的外键,该子句也允许从主表中获取所有记录:
SELECT
v.Id_vehicle_pk,
v.id_driver_fk,
u.mail,
c.Id_coll_pk,
c.First_Name,
c.Last_Name
FROM Vehicle v LEFT JOIN
User u ON v.id_driver_fk = u.Id_user_pk LEFT JOIN
Collaborator c ON c.Id_user_fk = u.Id_user_pk
WHERE Id_vehicle_pk> 0
此外,最佳实践是将连接条件放入连接而不是 WHERE
子句中。
关于mysql - 连接值和可为 null 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31827842/