左外连接和求和问题

时间:2012-10-02 10:30:18

标签: mysql sum left-join

我需要一个查询。我正在尝试将一个字段与连接表相加。有些记录不在第二个表中。所以这个记录总和应该为零。但查询只对第二个表中的记录求和。

select s.*,sum(sd.fiyat) as konak from fuar_sozlesme1 s 
left outer join fuar_sozlesme1_detay sd on (sd.sozlesme_id = s.id)

------ ------- EDIT

我在查询中添加了group by并解决了我的问题。这是新的;

select s.*,sum(sd.fiyat) as konak from fuar_sozlesme1 s 
left outer join fuar_sozlesme1_detay sd on (sd.sozlesme_id = s.id)
group by sd.sozlesme_id

3 个答案:

答案 0 :(得分:1)

我认为您需要使用IFNULL(sd.fiyat,0)代替sd.fiyat来获取来自第二个表格的NULL值的零,因为LEFT JOIN就像这样:

SELECT s.*, SUM(IFNULL(sd.fiyat, 0)) as konak
FROM fuar_sozlesme1 s 
LEFT OUTER JOIN fuar_sozlesme1_detay sd ON sd.sozlesme_id = s.id
GROUP BY s.someFields

答案 1 :(得分:1)

以下是一个简单示例,您可以提供帮助:http://sqlfiddle.com/#!2/41481/1

答案 2 :(得分:0)

这是一个老线程,但我花了几个小时试图解决同样的问题。

我的查询有两个连接,一个过滤器和一个SUM函数。我不是SQL专家,但是这帮助我实现了仍然显示结果的理想结果,即使连接表没有可以求和的行。

为了显示结果,即使总和总计无关,我的关键是GROUP BY。我仍然不能100%肯定为什么。

根据这篇文章选择了两种类型的联接 - MySQL Multiple Joins in one query?

SELECT registrations.reg_active, registrations.team_id, registrations.area_id, registrations.option_id, registrations.reg_fund_goal, registrations.reg_type, registrations.reg_fee_paid, registrations.reg_has_avatar, users.user_name, users.user_email, users.user_phone, users.user_zip, users.user_age, users.user_gender, users.user_active, SUM(IFNULL(donations.donation_amount,0)) as amt from registrations
    INNER JOIN `users` 
        ON registrations.user_id = users.user_id
        AND registrations.event_id = :event_id
    LEFT OUTER JOIN `donations` 
        ON registrations.reg_id = donations.reg_id
    GROUP BY donations.reg_id
    ORDER BY users.user_name ASC