维修数据库SQL查询需求:筛选指定工人指定时段工单
修正后的SQL查询:获取指定工人的工单列表
需求说明
需要编写SQL查询,返回工人Ewere或Daria的工单列表:
- 工单完成时间需满足:2014年1月1日至2月1日、2014年5月1日至6月1日,或任意时段(注:若"任意时段"指所有符合工人条件的工单,可直接保留工人筛选条件)
- 结果需包含工单描述、工人姓名、工单日期,并按工单日期升序排序
你尝试的代码
Select tblOperation.datOperationDate, tblOperation.txtOperationDescription, tblWorker.txtWorkerName, tblWorker.intWorkerId From tblOperation Inner join tblWorker on tblOperation.intWorkerId = tblWorker.intWorkerId Where ((('2000-08-20' < tblOperation.datOperationDate) and ('2012-02-20' < tblOperation.datOperationDate)) or (('2010-01-24' < tblOperation.datOperationDate) and ('2018-01-13' < tblOperation.datOperationDate))) and (tblOperation.txtOperationDescription = true) and (tblWorker..txtWorkerName = 'ewere') or (tblWorker..txtWorkerName = 'Daria') Order by tblOperation.datOperationDate
代码中的问题
- 时间条件完全偏离需求:使用了无关的日期区间,没有针对2014年的指定时段筛选
- 语法错误:
tblWorker..txtWorkerName多了一个多余的点,正确写法是tblWorker.txtWorkerName - 逻辑优先级错误:
AND优先级高于OR,导致工人姓名的判断逻辑被拆分,可能返回不符合条件的工单 - 字段类型不匹配:若
txtOperationDescription是文本类型,不能直接和布尔值true比较;若为布尔类型,需根据数据库语法调整(比如用1或'true') - 多余字段:需求不需要返回
intWorkerId,可移除
修正后的代码
SELECT tblOperation.txtOperationDescription AS 工单描述, tblWorker.txtWorkerName AS 工人姓名, tblOperation.datOperationDate AS 工单日期 FROM tblOperation INNER JOIN tblWorker ON tblOperation.intWorkerId = tblWorker.intWorkerId WHERE -- 指定工人范围 tblWorker.txtWorkerName IN ('ewere', 'Daria') AND ( -- 2014年1月1日至2月1日区间 tblOperation.datOperationDate BETWEEN '2014-01-01' AND '2014-02-01' -- 2014年5月1日至6月1日区间 OR tblOperation.datOperationDate BETWEEN '2014-05-01' AND '2014-06-01' -- 若"任意时段"指包含所有符合工人条件的工单,可删除上面两个时间条件 -- 若"任意时段"指排除上述两个区间,可替换为: -- OR NOT ( -- tblOperation.datOperationDate BETWEEN '2014-01-01' AND '2014-02-01' -- OR tblOperation.datOperationDate BETWEEN '2014-05-01' AND '2014-06-01' -- ) ) -- 过滤非空的工单描述(根据实际字段类型调整) AND tblOperation.txtOperationDescription IS NOT NULL ORDER BY tblOperation.datOperationDate ASC;
说明
- 用
IN ('ewere', 'Daria')简化工人姓名的判断,逻辑更清晰 - 使用
BETWEEN明确指定需求中的时间区间,避免日期比较的逻辑错误 - 用括号包裹时间条件,确保逻辑运算的优先级正确
- 给字段添加中文别名,让结果更易读
- 移除了需求不需要的
intWorkerId字段
内容的提问来源于stack exchange,提问作者wily.x.x
相关产品推荐
相关产品推荐

