2017-03-20 65 views
0

下面是我的查詢:左MySQL查詢問題聯接

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(1,2,3,4,5,6,7 )從這個用戶標識的用戶標識(1,2,3,4)已完成付款。用戶標識(5,6,7)還沒有完成付款。因此,用戶標識(5,6,7)不在付款表中。

和用戶ID(1,2,3,4,5,6,7)所做交易和它們的條目存在於交易table.and也產生髮票。

從上面的查詢我只獲得用戶id(1,2,3,4)的記錄,因爲它是支付表中的條目。 我也希望記錄誰的條目不在付款表中。 請任何人都可以幫我解決我的問題?

回答

0

如果添加在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' 
0

如果我正確地理解你的問題,你需要將此查詢用於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 
)