mysql - SQL 间歇性地不返回任何数据来响应 LEFT JOIN

标签 mysql sql database join left-join

我正在尝试查找 SQL 查询中的错误,但似乎无法深入了解它。查询如下所示:

SELECT
    DATE(BT.DateCheckedIn) AS X,
    DAYOFWEEK(BT.DateCheckedIn) AS DayX,
    SUM(IR.QtyCheckedIn) AS C,
    AU.AdminUsername,
    AU.AdminFirstName,
    AU.AdminLastName,
    IF(BTE.ProdLogID IS NULL, 'No', 'Yes') AS Exclude
FROM
    buying_issuesreceived IR
    JOIN buying_transactions BT ON IR.TransactionID = BT.TransactionID
    JOIN adminusers AU ON BT.CheckedInByAdminUserID = AU.AdminUserID
    LEFT JOIN log_production_bt BTE
        ON DATE(BT.DateCheckedIn) = DATE(BTE.ProductionDate)
        AND BTE.ProductionSection = 'wtransactions'
        AND AU.AdminUsername = BTE.ProductionUsername
WHERE
    DATE(BT.DateCheckedIn) BETWEEN DATE  '2018-09-24' AND DATE  '2018-09-30'
GROUP BY
    DATE(BT.DateCheckedIn),
    AU.AdminUsername

运行此查询时,它有大约 50/50 的机会返回正确的数据或根本不返回任何数据。没有错误消息。我知道,或者更确切地说应该说,我非常确定 LEFT JOIN 是罪魁祸首,因为当我从代码中删除它时,我不再获得空表,但我一生都无法弄清楚为什么这个查询会首先返回不一致的结果。

最佳答案

这听起来像是 MySQL 的错误。作为解决方法,您可以将 EXISTS 与相关子查询结合使用。

SELECT
    DATE(BT.DateCheckedIn) AS X,
    DAYOFWEEK(BT.DateCheckedIn) AS DayX,
    SUM(IR.QtyCheckedIn) AS C,
    AU.AdminUsername,
    AU.AdminFirstName,
    AU.AdminLastName,    
    IF(EXISTS(
        SELECT 1
        FROM log_production_bt BTE
        WHERE 
            DATE(BT.DateCheckedIn) = DATE(BTE.ProductionDate)
            AND BTE.ProductionSection = 'wtransactions'
            AND AU.AdminUsername = BTE.ProductionUsername), 'NO', 'YES') AS Exclude
FROM
    buying_issuesreceived IR
    JOIN buying_transactions BT ON IR.TransactionID = BT.TransactionID
    JOIN adminusers AU ON BT.CheckedInByAdminUserID = AU.AdminUserID
WHERE
    DATE(BT.DateCheckedIn) BETWEEN DATE  '2018-09-24' AND DATE  '2018-09-30'
GROUP BY
    DATE(BT.DateCheckedIn),
    AU.AdminUsername

关于mysql - SQL 间歇性地不返回任何数据来响应 LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53163112/

相关文章:

服务列表的 MySQL 数据库设计

mysql - Select 语句失败 SQL Server

sql - 根据另一列的总和选择列

database - 分布式事务-为什么我们将记录保存到文件系统?

mysql - 是否可以在 Angular.JS 中编写 mysql 查询?

c# - 无法连接到 SQL Server 数据库

MySQL 触发器 - 修剪并创建 2 条记录

java - 可执行的Java应用程序(JAR),其中包含数据库

android - Intent.putExtra 与 getJSONObject - Android

mysql - 无法通过套接字 '/run/mysqld/mysqld.sock' 连接到本地 MySql 服务器 (2)