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