[英]MySQL - Query to select data from 3 different tables using joins
我的 MySQL 數據庫中有 3 個表(合同、合同詳細信息、合同接收)。 表結構如下:
Contract
c_id | c_date | c_vendor | c_ref
---------+------------+------------+--------
1 | 2/27/2020 | MS Traders | n/a
2 | 2/28/2020 | MS Traders | n/a
3 | 2/29/2020 | J Premiers | n/a
Contract_Details
cc_id | cd_contract_id | cd_item | cd_qty | cd_rate | cd_total
---------+----------------+---------------+--------+---------+---------
1 | 1 | HP Laptop | 3 | 5300 | 15900
2 | 1 | Dell Laptop | 5 | 5700 | 28500
3 | 2 | HP Printer | 8 | 2500 | 20000
4 | 3 | Epson Printer | 5 | 3500 | 17500
5 | 3 | IB Scanner | 5 | 4200 | 21000
Contract_Receiving
cr_id | cr_cd_id | cr_date | cr_qty
---------+-----------+-------------+---------
1 | 1 | 3/1/2020 | 3
2 | 2 | 3/1/2020 | 5
3 | 3 | 3/3/2020 | 2
4 | 3 | 3/8/2020 | 2
我想從三個表中得到以下結果:
c_id | c_vendor | items_received | items_total
-------+------------+----------------+-------------
1 | MS Traders | 8 | 8
2 | MS Traders | 4 | 8
3 | J Premiers | 0 | 10
我正在使用以下查詢,但沒有得到想要的結果。 請指導我編寫查詢以獲得所需的結果。 謝謝
SELECT contract.*, IFNULL(SUM(cr_qty),0) AS 'Received', SUM(contract_detail.cd_qty) AS 'Total'
FROM `contract_receiving`
LEFT JOIN contract_detail ON (contract_receiving.cr_cd_id = contract_detail.cd_id)
LEFT JOIN contract ON (contract.c_id = contract_detail.cd_contract_id)
GROUP BY contract.c_id
您可以通過在加入前計算 items_received 和 items_total 來獲得預期的結果。
SELECT
c.c_id,
c.c_vendor,
COALESCE(cr.items_received, 0) items_received,
COALESCE(cd.items_total, 0) items_total
FROM contract c
LEFT JOIN
( SELECT cd_contract_id, SUM(cd_qty) items_total
FROM contract_detail
GROUP BY cd_contract_id) cd
ON c.c_id=cd.cd_contract_id
LEFT JOIN
( SELECT cd_contract_id, SUM(cr_qty) items_received
FROM contract_receiving
INNER JOIN contract_detail
ON cd_id=cr_cd_id
GROUP BY cd_contract_id) cr
ON c.c_id=cr.cd_contract_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.