[英]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.