You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

维修数据库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

代码中的问题

  1. 时间条件完全偏离需求:使用了无关的日期区间,没有针对2014年的指定时段筛选
  2. 语法错误:tblWorker..txtWorkerName多了一个多余的点,正确写法是tblWorker.txtWorkerName
  3. 逻辑优先级错误:AND优先级高于OR,导致工人姓名的判断逻辑被拆分,可能返回不符合条件的工单
  4. 字段类型不匹配:若txtOperationDescription是文本类型,不能直接和布尔值true比较;若为布尔类型,需根据数据库语法调整(比如用1或'true')
  5. 多余字段:需求不需要返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:45:10