我有三个表,一个包含有关客户端的信息(名称,用户名),另一个表包含对他的汽车执行的服务(从服务获得的点数),服务制定的表和一个与公司的表,表示客户工作(姓名,地点)。
我正在尝试进行查询,以便将客户工作的公司,客户本人以及获得的所有积分的总和汇总在一起。我已经尝试了几种方法,但都失败了。我想显示客户信息,即使它没有任何积分。
这是我已经尝试过的
SELECT *FROM client c
INNER JOIN company b ON c.company_idcompany = b.idcompany
INNER JOIN (select sum(pointos) as pointos From services) d
SELECT *FROM client c
INNER JOIN company b ON c.company_idcompany = b.idcompany
INNER JOIN service d ON c.idclient = d.client_idclient
答案 0 :(得分:1)
请提供更多表结构数据(例如创建脚本)。
我认为问题是您必须在加入时使用LEFT JOIN,并且您没有在第一个查询的第二个连接语句中提供任何“连接信息”。
答案 1 :(得分:1)
您需要对聚合查询进行LEFT JOIN。如果INNER JOIN,它将仅返回在服务中具有条目的行。没有服务的客户将不会被退回。试试这个
SELECT *FROM client c
INNER JOIN company b ON c.company_idcompany = b.idcompany
LEFT JOIN (select client_idclient,sum(pointos) as pointos From services group by client_idclient) d on c.idclient=d.client_idclient
如果你需要零而不是NULL,你可以使用IFNULL来转换点的总和。