1

我有一个 mysql 数据库,我想做一个特定的选择。这是场景:

第一张桌子

有关货运车辆的道路清单数据。

roadListNumber(primary_key), vehicle, driver, startWorkTime, endWorkTime and so on.

第二张桌子

使用第一个表的主键映射的货物区域。

roadListNumber(foreign_key), zoneId, timeInside, spentMoney and so on.

问题是不是每辆车都去货物区所以一些道路列表没有与货物区(第二个表)映射,这是我的问题和问题:

如何从第一个表中选择所有的道路清单并将结果与​​第二个表(货物区)连接,而不会跳过未与货物区映射的道路清单?

4

2 回答 2

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
于 2013-02-15T11:44:09.143 回答
1

您已经使用了正确的词 (JOIN)。您可以使用 aLEFT OUTER JOIN来获取第一个(或)表中的所有记录,并根据子句将它们与第二个(或右)表中的相应记录相关联。ON

注意这里左右表格术语的用法以及如何关联的LEFTOUTER 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

于 2013-02-15T11:44:12.003 回答