2017-04-06 109 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;