mysql - 连接值和可为 null 的值

标签 mysql sql sql-server join view

我的 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 的空值导致我得到错误的结果。所以我需要知道:

  1. 如何解决我的查询?

最佳答案

我认为您正在寻找 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/

相关文章:

sql - 表中的单个默认值

sql-server - "Catching"SQL Server 2005 中用户定义函数中的错误

php - 将数据输出为 Excel 文件

PHP & MySQL : How can I use "SET @rank=0;" in $query=

mysql - SQL - 计算 30 天前并删除

mysql - 如何做一个MYSQL条件选择语句

php - php 网站上某些查询白屏死机?

mysql - 连接引用表后 SUM 结果出现问题

sql - PostgreSQL 认为没有索引,当有

c# - Entity Framework 和 SCOPE_IDENTITY