表1 - jos_addRabotyAndProstoyMain
| id | Marka | OtrabotanoMachine_hours|
| 8 | 90979 | 6 |
| 9 | 90979 | 11 |
| 10 | 90979 | 11 |
| 11 | 90979 | 11 |
| 12 | 90979 | 11 |
表2 - jos_addRabotyAndProstoySecond
| id | Hours | id_fk|
| 13 | 2 | 8 |
| 14 | 2 | 9 |
| 15 | 3 | 9 |
| 16 | 3 | 9 |
| 17 | 4 | 10 |
| 18 | 2 | 10 |
| 19 | 2 | 11 |
| 20 | 3 | 12 |
我的内部联接查询:
SELECT avto.Marka AS Marka,sum(main.OtrabotanoMachine_hours) as 'work hours', SUM(sec.Hours) as downtime
FROM
jos_addRabotyAndProstoyMain main
INNER JOIN avto ON main.Marka=avto.ID_Avto
INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id
GROUP BY avto.Marka
我得到以下结果:
| Marka | work hours | downtime|
| Liebherr | 83 | 21 |
如您所见,“工作时间”列中的总和不正确(83而不是50),因为主表中的主键在次表中符合1-3个外键。
我想,排在什么位置
INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id
需要一些过滤器。我不知道如何解决它,请帮忙。
我想要结果如:
| Marka | work hours | downtime|
| Liebherr | 50 | 21 |
答案 0 :(得分:2)
您可以通过jos_addRabotyAndProstoySecond
字段聚合id_fk
表来修复您的查询。 JOIN
和jos_addRabotyAndProstoySecond
之间的jos_addRabotyAndProstoyMain
操作转换为1-1连接,并删除重复项:
SELECT avto.Marka AS Marka,
sum(main.OtrabotanoMachine_hours) as 'work hours',
SUM(sec.Hours) as downtime
FROM jos_addRabotyAndProstoyMain main
INNER JOIN avto ON main.Marka=avto.ID_Avto
INNER JOIN (
SELECT id_fk, SUM(Hours) AS Hours
FROM jos_addRabotyAndProstoySecond
GROUP BY id_fk) sec ON sec.id_fk = main.id
GROUP BY avto.Marka