2017-04-06 91 views
0

連接的表與數據的總和我有一個表「schLoc」像這樣mySQL的SELECT在子查詢

------------------------ 
| id | ... | ... | ... | 
------------------------ 
| 1 | ... | ... | ... | 
| 2 | ... | ... | ... | 
| 3 | ... | ... | ... | 
| 4 | ... | ... | ... | 
| 5 | ... | ... | ... | 
| .. | ... | ... | ... | 
------------------------ 

和類似這樣的「schLocDett」另一個表這樣其中schLoc.id = schLocDett.idDoc

------------------------------- 
| idDoc | qta | ... | merce | 
------------------------------- 
| 1  | 1 | ... | fattLoc | 
| 1  | 1 | ... | fattSrv | 
| 2  | 3 | ... | fattLoc | 
| 2  | 2 | ... | notcSrv | 
| 2  | 2 | ... | fattSrv | 
| 3  | 5 | ... | fattSrv | 
| 3  | 3 | ... | notcSrv | 
| 3  | 3 | ... | fattLoc | 
| 3  | 7 | ... | fattLoc | 
| 4  | 5 | ... | notcSrv | 
| 4  | 4 | ... | fattSrv | 
| 4  | 1 | ... | fattSrv | 
| 5  | 1 | ... | notcSrv | 
| ... | ... | ... | ....... | 
------------------------------- 

我想列出完整的schLoc和每個id qta關聯的總和,但僅用於merce = fattLoc。在不存在的情況下,總和爲0。 這是結果,我希望

--------------------------- 
| id | sumQta | ... | ... | 
------------------------ 
| 1 | 1  | ... | ... | 
| 2 | 3  | ... | ... | 
| 3 | 10  | ... | ... | 
| 4 | 0  | ... | ... | 
| 5 | 0  | ... | ... | 
| .. | ... | ... | ... | 
--------------------------- 

我嘗試用這樣的:

SELECT TOT.sumQta, TAB.*, 
FROM schLoc AS TAB, schLocDett AS DETT, 
    (SELECT idDoc, SUM(qta) AS sumQta 
    FROM schLocDett 
    WHERE merce='fattLoc' 
    GROUP BY idDoc) AS TOT 
WHERE TAB.id>0 
    AND TAB.id=DETT.idDoc 
    AND TAB.id=TOT.idDoc 

,但沒有得到ID 4和5

任何建議都歡迎

回答

1
SELECT TAB.*, COALESCE(TOT.sumQta, 0) AS sumQta 
FROM schLoc TAB 
LEFT JOIN 
(
    SELECT idDoc, SUM(qta) AS sumQta 
    FROM schLocDett 
    WHERE merce = 'fattLoc' 
    GROUP BY idDoc 
) TOT 
    ON TAB.id = TOT.idDoc 

產量:

enter image description here

演示在這裏:

Rextester

1

您可以使用LEFT JOINIFNULL,例如:

SELECT loc.id, SUM(IFNULL(det.qta, 0)) AS sum 
FROM schLoc loc LEFT JOIN schLocDett det ON loc.id = det.idDoc 
WHERE det.merce = 'fattLoc' 
GROUP BY loc.id;