正确加入多个表

Bur*_*ppo 1 mysql sql

我想要显示所有payment_type 信用付款.然而,我只看到一个,我的total专栏肯定是不对的.我一定是搞砸了,JOINs但我不知道怎么解决它们.我尝试了不同的组合LEFTs RIGHTs等,并且不断出现.

我应该看到Tammy和Terry.总数目前是正确的.

这是我的SQL的小提琴.

另外,我在这里查询:

SELECT p.conf, 
       Concat(g.fname, ' ', g.lname) AS guest, 
       u.unit_name, 
       p.card_type, 
       p.payment_amt, 
       Sum(p.payment_amt)            AS total 
FROM   payments p, 
       guests g, 
       units u, 
       reservations r 
WHERE  p.reservation = r.id 
       AND r.guest = g.id 
       AND r.unit = u.id 
       AND p.payment_date = '2013-11-01' 
       AND p.payment_type = 'credit' 
Run Code Online (Sandbox Code Playgroud)

OGH*_*aza 7

那么你可以使用子查询来做到这一点:

SELECT p.conf, 
       Concat(g.fname, ' ', g.lname) AS guest, 
       u.unit_name, 
       p.card_type, 
       p.payment_amt,
       ( SELECT SUM(payment_amt) 
         FROM payments 
         WHERE payment_date = p.payment_date 
           AND payment_type = p.payment_type) AS total
FROM payments p 
LEFT JOIN reservations r ON p.reservation = r.id 
LEFT JOIN guests g ON r.guest = g.id 
LEFT JOIN units u ON  r.unit = u.id 
WHERE p.payment_date = '2013-11-01' 
  AND p.payment_type = 'credit'
Run Code Online (Sandbox Code Playgroud)

小提琴

或者你可以计算之后的总数,并将UNION计算到结果的其余部分:

UNION ALL
SELECT NULL, 'Total', NULL, NULL, SUM(payment_amt) 
FROM payments 
WHERE payment_date = '2013-11-01' 
  AND payment_type = 'credit'
Run Code Online (Sandbox Code Playgroud)

小提琴上的完整SQL