我有一个mysql数据库,我想做一个特定的选择。这是场景:
第一张表
关于货车的道路清单数据。
roadListNumber(primary_key), vehicle, driver, startWorkTime, endWorkTime and so on.
第二张表
使用第一个表的主键映射的货物区域。
roadListNumber(foreign_key), zoneId, timeInside, spentMoney and so on.
问题在于并非每辆车都进入货物区域,所以一些道路清单没有与货物区域(第二张表格)相映射,这就是我的问题和问题:
如何从第一张表格中选择所有道路清单,并将结果与第二张表格(货物区域)连接,而不跳过未与货物区域映射的道路列表?
答案 0 :(得分:2)
您可以使用LEFT JOIN
获取数据...也可以使用GROUP BY
来避免重复数据..
SELECT rl.roadListNumber,rl.vehicle,cz.zoneId,cz.spentMoney
FROM road_list rl
LEFT JOIN cargo_zone cz on (rl.roadListNumber=cz.roadListNumber)
GROUP BY rl.roadListNumber
答案 1 :(得分:1)
您已使用正确的字词(加入)。您可以使用LEFT OUTER JOIN
来获取第一个(或左)表中的所有记录,并将它们与第二个(或右)中的相应记录相关联。 em>)表根据ON
子句。
请注意左和右表术语的使用及其与 LEFT
OUTER JOIN.
的关系
如果第二个表上没有匹配的记录,您将在结果集的第二个表的列中获得NULL
。
SELECT * FROM roadlist rl
LEFT OUTER JOIN cargozones cz ON rl.roadlistnumber = cz.roadlistnumber
JOIN
有很多种。例如,如果您使用INNER JOIN
,则只能获得第二个表上匹配的记录。
有关SQL如何工作的详细视觉说明,请参阅此博客文章:Coding Horror: A Visual Explanation of SQL Joins。