我有三(3)张表:
如果车辆被映射到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'`
表中的所有车辆。
答案 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'
你得到你想要的信息吗?