mysql选择跨2个表 - 如果匹配值在另一个表中,则仅包括1中的行

时间:2016-03-23 16:56:41

标签: php mysql

我为具有多个表的客户端构建了一个维护数据库,该数据库工作正常,但现在他们希望能够获取报告,而且我在2个表中创建select语句时遇到了问题。

用户可以搜索修复类型,开始/结束日期和位置...两个日期之间的所有返回修复类型的结果都没有问题(全部保存在同一个表中),但不同类型修复的表格不在&# 39; t存储位置信息,该信息与车辆信息表中的信息保持一致。

所以在1表上我可以查询类似的内容:

SELECT fid from cm_repair where start_date >= '$date1' AND end_date <= '$date2'

在另一张桌子上我可以:

SELECT id from cm_fleet where location='$loc'

无论如何我可以将这些组合在一起,这样我只能获得id和fid匹配的行吗?

3 个答案:

答案 0 :(得分:0)

您可以使用INNER JOIN

SELECT fid 
from cm_repair as t1
join cm_fleet as t2 on t1.fid = t2.id and location='$loc'
where start_date >= '$date1' AND end_date <= '$date2'

答案 1 :(得分:0)

检查link

内部,左侧和右侧连接是用于组合您可能需要的表的常用选项。

Inner将从BOTH表中引入所有有效行和选定列。基本上,如果您要加入的ID存在于一个表中,而不存在于另一个表中,则最终可能会出现具有空值的列。

由于返回的数据较少(取决于您的查询和语句),因此左侧和右侧的处理与内部相似且处理速度稍快。本质上,它将返回左表和右表中的所有有效行和选定列,但如果您加入的ID不在连接的另一侧,则不会返回该行数据,因此不会空值。

答案 2 :(得分:0)

谢谢,会尝试所有这些 - 但是我们发现了表格设置方式的缺陷,需要编辑以在修复表中包含位置列,这样可以使搜索更容易好。