Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Mysql数据库从两个SQL表中具体选择数据_Mysql_Sql_Select - Fatal编程技术网

使用Mysql数据库从两个SQL表中具体选择数据

使用Mysql数据库从两个SQL表中具体选择数据,mysql,sql,select,Mysql,Sql,Select,我有一个mysql数据库,我想做一个具体的选择。以下是场景: 第一个表格 关于货运车辆的道路列表数据 roadListNumber(primary_key), vehicle, driver, startWorkTime, endWorkTime and so on. 第二张表 使用第一个表的主键映射的货物区域 roadListNumber(foreign_key), zoneId, timeInside, spentMoney and so on. 问题在于,并非所有车辆都会驶入货物区,因

我有一个mysql数据库,我想做一个具体的选择。以下是场景:

第一个表格

关于货运车辆的道路列表数据

roadListNumber(primary_key), vehicle, driver, startWorkTime, endWorkTime and so on.
第二张表

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

roadListNumber(foreign_key), zoneId, timeInside, spentMoney and so on.
问题在于,并非所有车辆都会驶入货物区,因此一些道路列表没有与货物区进行映射(第二个表),这就是我的问题和问题:


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

您可以使用
左连接
获取数据。。。同时使用
分组依据
,以避免重复数据

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

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

注意这里左右表术语的用法,以及它与
外部联接的关系。

如果第二个表上没有匹配的记录,则在结果集中第二个表的列上会出现
NULL

SELECT * FROM roadlist rl 
    LEFT OUTER JOIN cargozones cz ON rl.roadlistnumber = cz.roadlistnumber
有很多种
连接
。例如,如果您使用的是
内部联接
,则只会获得第二个表中匹配的记录

有关SQL联接如何工作的良好视觉解释,请参阅此博客文章: