2016-03-23 14 views
3

Tabelle 1 - jos_addRabotyAndProstoyMaininnere Verknüpfung falsche Summe()

| id  | Marka | OtrabotanoMachine_hours| 
| 8  | 90979 | 6      | 
| 9  | 90979 | 11      | 
| 10  | 90979 | 11      | 
| 11  | 90979 | 11      | 
| 12  | 90979 | 11      | 

Tabelle 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 | 

Meine innere Join-Abfrage:

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 

ich folgendes Ergebnis:

| Marka | work hours | downtime| 
    | Liebherr | 83   | 21  | 

Wie Sie sehen können, ist die Summe in der Spalte 'Arbeitsstunden' falsch (83 statt 50), weil der Primärschlüssel in der Haupttabelle 1-3 Fremdschlüssel in der Sekundärtabelle erfüllt. Ich denke, was in Zeile INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id brauche einige Filter.Ich bin keine Ahnung, wie es zu lösen, bitte helfen. Ich möchte führen wie:

| Marka | work hours | downtime| 
    | Liebherr | 50   | 21  | 

Antwort

2

Sie Ihre Abfrage durch Aggregation jos_addRabotyAndProstoySecond Tabelle von id_fk Feld beheben können. Die JOIN zwischen jos_addRabotyAndProstoySecond und jos_addRabotyAndProstoyMain umgewandelt wird in ein 1-1 verbinden und Duplikate werden eliminiert:

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 
+0

Dank für die schnelle Antwort, das funktioniert, – Vitaly

Verwandte Themen