()

2016-03-23 3 views
3

Tablo yanlış toplamı birleştirme 1 - jos_addRabotyAndProstoyMain()

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

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

My iç birleştirme sorgusu: Aşağıdaki sonuçlar elde

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  | 

Gördüğünüz gibi, 'çalışma saatleri' sütunu toplamı yanlış (83 yerine 50), çünkü ana tabloda ana anahtar ikincil tabloda 1-3 yabancı anahtarla uyumludur. Sanırım, INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id satırında bir kaç filtreye ihtiyacım var. Bunu nasıl çözeceğimi bilmiyorum, lütfen yardım edin. Sen id_fk alana göre jos_addRabotyAndProstoySecond tablosunu toplayarak Sorgunuzla düzeltebilirsiniz

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

cevap

2

: ben gibi sonuçlanacaktır istiyorum. Bir 1-1 katılmak içine jos_addRabotyAndProstoySecond ve jos_addRabotyAndProstoyMain arasında JOIN operasyon dönüşür ve çiftleri elenir: hızlı cevap için

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

sayesinde, bu eserler – Vitaly