我有一个mysql数据库,我想做一个特定的选择。下面是一个场景:
第一表
货运车辆的道路清单数据。
roadListNumber(primary_key), vehicle, driver, startWorkTime, endWorkTime and so on.第二表
用第一个表的主键映射货物区域。
roadListNumber(foreign_key), zoneId, timeInside, spentMoney and so on.问题是,并非每部车辆都会驶往货运区,所以有些道路清单并没有列出货运区(第二表),我的问题和问题如下:
如何从第一个表中选择所有的路况列表,并将结果与第二个表(货物区)连接,而不跳过没有与货物区域映射的路表列表?
发布于 2013-02-15 11:44:12
您已经使用了正确的单词(联接)。您可以使用LEFT OUTER JOIN来获取第一个(或左边)表中的所有记录,并根据ON子句将它们与第二个(或右边)表中的相应记录关联起来。
请注意这里左表和右表术语的用法以及它与LEFTOUTER JOIN.的关系。
如果第二个表上没有匹配的记录,您将在结果集中的第二个表的列上获得NULL。
SELECT * FROM roadlist rl
LEFT OUTER JOIN cargozones cz ON rl.roadlistnumber = cz.roadlistnumberJOIN有很多种。例如,如果您使用的是INNER JOIN,则只能获得第二个表中有匹配的记录。
请参阅这篇博客文章,以获得关于SQL如何工作的良好的可视化说明:编码恐怖: SQL连接的可视化解释。
发布于 2013-02-15 11:44:09
你可以用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.roadListNumberhttps://stackoverflow.com/questions/14893933
复制相似问题