sql断断续续地不返回任何数据来响应左连接

vhipe2zx  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(267)

我试图找出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的机会返回正确的数据或根本不返回任何数据。没有错误消息。我知道,或者更确切地说,我非常肯定,左连接是罪魁祸首,因为当我从代码中删除它时,我不再得到空表,但我一辈子都搞不清楚为什么这个查询首先会返回不一致的结果。

33qvvth1

33qvvth11#

这听起来像一个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

相关问题