Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从不同表中添加总和_Mysql - Fatal编程技术网

Mysql 从不同表中添加总和

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) +

我已经把它贴成了,我得到了答案,但是答案本身有一个缺陷

我有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) +  
            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中工作: