mysql - MySQL LEFT JOIN 忽略 AND 条件
问题描述
我有一个功能性的 LEFT JOIN MySQL 查询,结构如下:
SELECT
COUNT(HTG_ScheduleRequest.ID) AS current_job,
HTG_TechProps.EmpNumber,
HTG_TechProps.EmpFirstName,
HTG_TechProps.EmpLastName,
HTG_TechProps.Veh_Number
FROM HTG_TechProps
LEFT JOIN HTG_ScheduleRequest ON HTG_TechProps.EmpNumber = HTG_ScheduleRequest.SSR
AND (HTG_ScheduleRequest.ScheduleDateCurrent = CURDATE() || HTG_ScheduleRequest.ScheduleDateExact = CURDATE())
AND RecordType = '1'
AND HTG_ScheduleRequest.JobStatus IN (2,5,8,3,4,7)
GROUP BY HTG_TechProps.EmpNumber ORDER BY HTG_TechProps.EmpNumber ASC
我需要向初始 SELECT 表添加一些条件,如下所示:
HTG_TechProps.EmpStatus='A'
当我在 LEFT JOIN 之前添加 WHERE 语句时出现语法错误,并且当我在 LEFT JOIN 之后添加这样的 AND 时,它会被忽略,仍然返回不等于 A 的记录。
LEFT JOIN HTG_ScheduleRequest ON HTG_TechProps.EmpNumber = HTG_ScheduleRequest.SSR
AND HTG_TechProps.EmpStatus='A'
解决方案
a 中第一个表的条件LEFT JOIN
应该放在一个WHERE
子句中:
SELECT COUNT(sr.ID) AS current_job,
tp.EmpNumber, tp.EmpFirstName, tp.EmpLastName, tp.Veh_Number
FROM HTG_TechProps tp LEFT JOIN
HTG_ScheduleRequest sr
ON tp.EmpNumber = sr.SSR AND
(sr.ScheduleDateCurrent = CURDATE() OR sr.ScheduleDateExact = CURDATE()
) AND
sr.RecordType = '1' AND -- assume this comes from SR
sr.JobStatus IN (2, 5, 8, 3, 4, 7)
WHERE tp.EmpStatus='A'
GROUP BY tp.EmpNumber -- this is okay assuming that it is unique or (equivalently) a primary key
ORDER BY tp.EmpNumber ASC;
请注意,这引入了表别名,因此查询更易于编写和阅读。
推荐阅读
- python - 具有多个顺序条件的字典过滤
- html - CSS 样式类被忽略
- java - groovyx.net.http.RESTClient 支持 TLSv1.2:
- java - 从存储在父类变量中的子类变量中获取变量
- java - 同包java小程序中的类
- php - fwrite 不适用于一些额外的非特殊字符
- mongodb - 在 MongoDB 中合并两个 $lookup 集合
- r - 如何从不平衡的数据中创建一个新的平衡数据框,以确保随机选择记录?
- django - 我如何在 django 中创建一个也发送邮件的注册表单
- android - 如何使用 kotlin 从 onPostExecute() 方法更改活动