我在SQL数据库中有2个表。
第一个表 - 设备 - 包含公司中使用的机器记录清单。以下是 Equipment 表的列名。
id | assetnumber | 制作 |的 模型
其中:
对于每件机器,操作员必须完成每周一次的安全检查。每个提交的报告都会输入第二个表格 - 报告。
Reports 表的设置如下。
id | userid | assetnumber | 问题 | 周数 |的 datesubmitted
其中:
我需要让管理员用户输入周数,例如33然后查询 Reports 表以返回所有机器的 assetnumber 列表,其中没有为查询的周数提交该机器的报告。这将用于确保每周完成报告以符合安全标准。
我正在从网页中捕获周数以传递给SQL查询,但我不知道如何查询2个表以返回所需的数据。
我在尝试:
SELECT Equipment.assetnumber, Reports.assetnumber, Reports.weeknumber FROM Reports JOIN Reports ON Reports.assetnumber = Equipment.assetnumber WHERE Reports.weeknumber IS NULL
但我不认为我走在正确的轨道上。 如何找到使用SQL交叉引用我的2个表的所有设备的列表?
我还考虑创建一个读取两个表的JavaScript文件,将它们存储为单独的数组,然后循环遍历数组以查看值不匹配的位置 - 但显然这比单个SQL查询效率低。
答案 0 :(得分:2)
有几种方法可以做到这一点
首先,类似于您的尝试,您可以使用左连接,左连接保留左表(设备)上的所有行并使用"其中"获取右表没有数据的行(Reports)。
SELECT e.assetnumber
FROM Equipment e
LEFT JOIN Reports r ON r.assetnumber = e.assetnumber AND r.weeknumber = 33
WHERE r.datesubmitted is NULL
这是另一种方式,更简单:
SELECT e.assetnumber
FROM Equipment e
WHERE e.assetnumber NOT IN
(SELECT assetnumber FROM Reports WHERE weeknumber = 33)