MYSQL离开加入不起作用

时间:2017-09-06 11:03:19

标签: mysql join

我有三(3)张表:

  • vehicle表: Vehicle table

  • userCarMapping表: userCarMapping

  • userInfouserInfo

如果车辆被映射到vehicle表中的用户,我想从firstname表和last name以及userInfo的{​​{1}}表中获取所有车辆

我写了这个查询:

userCarMapping

我正在获取此输出,因为我想要SELECT `vehicle`.`vehicleId`, `vehicle`.`modelId`, `vehicle`.`RegNo`, `userInfo`.`firstName`, `userInfo`.`lastName` FROM `vehicle` LEFT JOIN `userCarMapping` ON `vehicle`.`vehicleId` = `userCarMapping`.`vehicleId` LEFT JOIN `userInfo` ON `userCarMapping`.`userId` = `userInfo`.`userId` WHERE `vendorUserId` = '1' AND `vehicle`.`status` = 'approved' AND `userInfo`.`status` = 'approved'` 表中的所有车辆。

output

2 个答案:

答案 0 :(得分:1)

当你在userinfo中使用where表条件时,它只返回那些满足条件的行。但是如果你在join中使用userinfo条件而不是where,那么表连接满足条件的行在userinfo表中有5条记录,而status active只有两条记录,然后加入只考虑这两行的连接。

尝试以下查询:

 SELECT `vehicle`.`vehicleId`, `vehicle`.`modelId`, `vehicle`.`RegNo`, `userInfo`.`firstName`, `userInfo`.`lastName` 
 FROM `vehicle` 
 LEFT JOIN `userCarMapping` ON `vehicle`.`vehicleId` = `userCarMapping`.`vehicleId` 
 LEFT JOIN `userInfo` ON `userCarMapping`.`userId` = `userInfo`.`userId`  AND `userInfo`.`status` = 'approved'`
 WHERE `vendorUserId` = '1' AND `vehicle`.`status` = 'approved'

希望你理解答案。

答案 1 :(得分:1)

我相信您的问题在于查询的位置。

SELECT
    vehicle.vehicleId,
    vehicle.modelId,
    vehicle.RegNo,
    userInfo.firstName,
    userInfo.lastName
FROM
    vehicle
LEFT JOIN userCarMapping ON vehicle.vehicleId=userCarMapping.vehicleId
LEFT JOIN userInfo ON  serCarMapping.userId=userInfo.userId
WHERE vendorUserId= '1' 
AND vehicle.status= 'approved' 
AND userInfo.status= 'approved'

基本上,如果用户对于车辆不存在,它仍然在寻找带有已批准的userInfo表。如果删除

AND userInfo.status= 'approved'

你得到你想要的信息吗?