我已经尝试了很多组合,所以也许我只是做错了。好吧,我肯定做错了。
我知道代码总是在 Stack Overflow 上被请求,但它会混淆这个问题,因为我的代码现在已经变异成另一种语言。
困惑:
有两个WHERE
子句,无论我把它放在哪里,我要么得到一个错误,要么JOIN
不起作用
问题:
我有 4 张桌子:
customers
- 即使没有付款,我也需要返回所有行,但前提是customer_status = 1
payments
- 包含customer_id
链接到customers
表 - 我需要从返回的 SUMpayment_amount
仅当payment_status = 1
branches
- 包含customer_id
链接到customers
表
managers
- 包含branch_id
链接到branches
表
CUSTOMER | TOTAL_RECEIVED | BRANCH | MANAGER_NAME
----------------------------------------------------------------------
Pepsi | £1000 | London | Mr Smith
Coca Cola | | Manchester | Mr Beckham
Dr Pepper | £2500 | Shanghai | Mr Miagi
Duff | | Springfield | Mr Simpson
如您所见,coca cola 和 duff 尚未付款(付款表中没有记录)但它仍应列出
- 所以客户都应该出现如果
customer_status = 1
SUM
仅当它在数据库中并且 payment_status = 1 时才支付- Branch 和 Manager 应该列出该客户,因为它始终在数据库中
- 经理在自己的桌子上,因为有很多并且在不同的时间分配到不同的分支机构(我感觉有人可能会问)
选择的字段和摘要
c.customer_id, c.customer_companyname, c.customer_status FROM customers c WHERE c.customer_status = 1
SUM(p.payment_amount) as total_received, p.customer_id, p.payment_status FROM payments p WHERE p.payment_status = 1
b.branch_id, b.branch, b.customer_id FROM branches b WHERE b.customer_id = c.customer_id
m.manager_id, m.manager_name, m.branch_id FROM managers m WHERE m.branch_id = b.branch_id