我为具有多个表的客户端构建了一个维护数据库,该数据库工作正常,但现在他们希望能够获取报告,而且我在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匹配的行吗?
答案 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)
谢谢,会尝试所有这些 - 但是我们发现了表格设置方式的缺陷,需要编辑以在修复表中包含位置列,这样可以使搜索更容易好。