繁体   English   中英

MySQL查询问题与左联接

[英]Mysql query issue with left join

以下是我的查询:

SELECT 
    u.id, 
    CONCAT(u.FirstName, ' ', u.LastName) as customer, 
    u.MobileNumber, 
    u.EmailId, 
    (
        pmt.TotalCreditedAmt - trns.TotalDeductAmt
    ) as available_balance, 
    DATE_FORMAT(i.InvoiceDate, '%Y/%m/%d') as InvoiceDate, 
    pmt.TotalCreditedAmt, 
    trns.TotalDeductAmt 
FROM 
    (`Users` as u) 
    INNER JOIN (
        SELECT 
            Max(InvoiceDate) AS InvoiceDate, 
            Customer_id 
        FROM 
            Invoice 
        GROUP BY 
            Customer_id
    ) as i ON `i`.`Customer_id` = `u`.`Id` 
    LEFT JOIN (
        SELECT 
            sum(CreditedAmount) AS TotalCreditedAmt, 
            UserId 
        FROM 
            Payment 
        where 
            PaymentSucc = "Yes" 
        GROUP BY 
            UserId
    ) as pmt ON `pmt`.`UserId` = `u`.`id` 
    LEFT JOIN (
        SELECT 
            sum(Amount) AS TotalDeductAmt, 
            UserId 
        FROM 
            Transaction 
        GROUP BY 
            UserId
    ) as trns ON `trns`.`UserId` = `u`.`id` 
WHERE 
    `u`.`UserType` = 'User' 
    AND `pmt`.`TotalCreditedAmt` - trns.TotalDeductAmt < '0' 
ORDER BY 
    `u`.`EmailId` desc 

我在以下情况下遇到问题:

该用户ID的用户ID(1,2,3,4)中的用户ID(1,2,3,4,5,6,7)已完成付款,而用户ID(5,6,7)未完成尚未付款,因此付款表中不存在用户id(5,6,7)的条目。

用户ID(1,2,3,4,5,6,7)已完成交易,其条目显示在交易表中,并生成发票。

从上面的查询中,我只获得了用户ID(1,2,3,4)的记录,因为它是付款表中的条目。 我还希望付款表中不存在谁的条目的记录。 请任何人可以帮助我解决我的问题?

如果在与左联接表相关的where子句中添加条件,则会获得内部联接

 WHERE 
`u`.`UserType` = 'User' 
AND `pmt`.`TotalCreditedAmt` - trns.TotalDeductAmt < '0' //this should be place in on clause  

例如:

  ) as trns ON `trns`.`UserId` = `u`.`id`  
       and  `pmt`.`TotalCreditedAmt` - trns.TotalDeductAmt < '0' 
 WHERE  `u`.`UserType` = 'User' 

如果我正确理解了您的问题,则需要将此查询用于pmt 这样做的目的是为“付款”表中不存在的用户返回0

单独运行此查询,并检查是否正确获取了TotalCreditedAmt 稍后,您可以将其插入主查询中。

(
SELECT 
    sum(case when p.userid is null then 0 else p.CreditedAmount) AS TotalCreditedAmt, 
    u.Id 
FROM 
    Users u left join Payment p on p.Userid=u.id
where 
    p.PaymentSucc = "Yes" 
GROUP BY 
    u.Id
) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM