1

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

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到查询中并解决了我的问题。这是新的;

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
4

3 回答 3

1

我认为您需要使用IFNULL(sd.fiyat,0)而不是为来自第二个表sd.fiyat的值获取零,因为这样:NULLLEFT 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
于 2012-10-02T10:45:31.737 回答
1

这是一个简单的例子,你可能会有所帮助:http ://sqlfiddle.com/#!2/41481/1

于 2012-10-02T10:51:01.363 回答
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
于 2014-03-10T01:59:10.553 回答