Mysql 从不同表中添加总和
我已经把它贴成了,我得到了答案,但是答案本身有一个缺陷 我有4个不同的表,每个表都有两个共同的字段Mysql 从不同表中添加总和,mysql,Mysql,我已经把它贴成了,我得到了答案,但是答案本身有一个缺陷 我有4个不同的表,每个表都有两个共同的字段total\u share和idea\u user\u id 我想从所有表中得到“总份额之和” 这是我的问题 SELECT SUM ( ifnull(s.total_share, 0) + ifnull(r.total_share, 0) + ifnull(c.total_share, 0) +
total\u share
和idea\u user\u id
我想从所有表中得到“总份额之和”
这是我的问题
SELECT SUM
(
ifnull(s.total_share, 0) +
ifnull(r.total_share, 0) +
ifnull(c.total_share, 0) +
ifnull(p.total_share, 0)
) as total_sum
FROM idea_submitter_percentage s
left outer join idea_revisor_percentage r on r.idea_user_id = s.idea_user_id
left outer join idea_contributor_percentage c on c.idea_user_id = s.idea_user_id
left outer join idea_comparisor_percentage p on p.idea_user_id = s.idea_user_id
WHERE s.idea_user_id = 3
它工作正常,但有两个问题:
idea\u submitter\u percentage
没有任何元组,其中idea\u user\u id=3
,则返回null
,但如果其他表没有条目,则不会返回null
idea\u user\u id=3
,则返回null
,但应返回0
问题是,在执行
联接时,您希望一个“主”表至少有一个结果。在你的情况下,这不是保证。解决问题的方法是使用UNION
语句:
SELECT idea_user_id, SUM(total_share) AS total_share
FROM (
SELECT s.idea_user_id, s.total_share
FROM idea_submitter_percentage s
WHERE s.idea_user_id = 3
UNION ALL
SELECT r.idea_user_id, r.total_share
FROM idea_revisor_percentage r
WHERE r.idea_user_id = 3
UNION ALL
SELECT c.idea_user_id, c.total_share
FROM idea_contributor_percentage c
WHERE c.idea_user_id = 3
UNION ALL
SELECT p.idea_user_id, p.total_share
FROM idea_comparisor_percentage p
WHERE p.idea_user_id = 3
) a
UNION
将愉快地忽略没有任何结果的表。您可以看到,它在以下SQL FIDLE中工作: