MySQL LEFT JOIN 忽略 AND 标准

标签 mysql sql

我有一个功能性的 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'

最佳答案

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;

请注意,这引入了表别名,因此查询更易于编写和读取。

关于MySQL LEFT JOIN 忽略 AND 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55595986/

相关文章:

每行的 MYSQL COUNT(*)

mysql - 根据正则表达式模式选择不同的记录

sql - 同一表内两列范围比较的索引

c# - MySQL 的什么列类型将在 C# 中作为 System.Guid 返回

php - 如何使用 php 和 mysql 处理加密的私有(private)消息

mysql - 使用具有动态表名的 Mysql 示例

sql - 如何对日期进行唯一约束,即x个月内没有日期的行

sql - 在 SQL 中查找 "next but one newest"日期的最佳方法是什么?

MySQL:日志显示记录已存在

mysql - INDEX() 在 MySQL 中创建聚集索引还是非聚集索引?