2012-10-02 108 views
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 
+0

如果你的问题是可以理解的,你必须在几分钟内很多答案。请更好地解释。 – fancyPants

+0

@tombom对不起,但我不怎么解释得更好。我只是想要一个查询,加上一个字段与左join.But一些记录不在第二个表中具有相同的id.So,这不是完全联合查询。我通过小组解决了我的问题。 –

回答

1

我thinik你需要使用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 
+0

好吧Mahmoud,“group by”解决了我的问题。非常感谢。 –

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