2016-05-07 4 views
1

У меня есть 5 таблиц tb1, tb2, tb3, tb4 и tb5.Правая ВСТУПЛЕНИЕ с выбранным результатом

этого выберите запрос

SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 
FROM tb1 c 
    JOIN tb2 b ON (c.id = b.idC) 
    JOIN tb3 l ON (b.id = l.idB) 
    JOIN tb4 a ON (a.id = l.idA) 
    JOIN tb5 f ON (f.id = a.idF) 
GROUP BY c.COL1, f.COL2 

Это результат запроса на выборку

+-----------+-------+-----------+ 
| COL1  | COL2 | COL3  | 
+-----------+-------+-----------+ 
| project1 | FAM1 | 1250.251 | 
| project1 | FAM2 | 2145.325 | 
| project2 | FAM1 | 2146.152 | 
| project3 | FAM2 | 1248.002 | 
| project4 | FAM1 | 3201.684 | 
| project4 | FAM2 | 7325.981 | 
| project5 | FAM1 | 4657.684 | 

Но я хочу, чтобы отобразить результат с этим форматом, если ProjectX не FAMx

+-----------+-------+-----------+ 
| COL1  | COL2 | COL3  | 
+-----------+-------+-----------+ 
| project1 | FAM1 | 1250.251 | 
| project1 | FAM2 | 2145.325 | 
| project2 | FAM1 | 2146.152 | 
| project2 | FAM2 | NULL  | 
| project3 | FAM2 | NULL  | 
| project3 | FAM2 | 1248.002 | 
| project4 | FAM1 | 3201.684 | 
| project4 | FAM2 | 7325.981 | 
| project5 | FAM1 | 4657.684 | 
| project5 | FAM1 | NULL  | 

это мой тест с RIGHT JOIN он не работает! Что мне не хватает?

CREATE TEMPORARY TABLE tempt AS 
    SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 
    FROM tb1 c 
     JOIN tb2 b ON (c.id = b.idC) 
     JOIN tb3 l ON (b.id = l.idB) 
     JOIN tb4 a ON (a.id = l.idA) 
     JOIN tb5 f ON (f.id = a.idF) 
    GROUP BY c.COL1, f.COL2; 
SELECT t.* FROM tempt t RIGHT JOIN tb5 f ON (f.COL2 = t.COL2) 

структура tab5 таблицы

+----+--------+------+ 
| id | COL1 | COL2 | 
+----+--------+------+ 
|1 | F1  | FAM1 | 
|2 | F2  | FAM2 | 
+----+--------+------+ 
+0

Где «ПРАВИЛЬНАЯ ВСТУПЛЕНИЕ»? – axiac

+0

SELECT t. * FROM tempt t RIGHT JOIN tb5 f ON (f.COL2 = f.COL2) – isom

+0

'ON (f.COL2 = f.COL2)'? Может быть, 'ON (t.COL2 = f.COL2)' ... – axiac

ответ

1

влево или вправо включается сами не может создать дополнительные отношения, которые вы хотите между всем «проектом» и ценностями «Ф».

Вам нужно построить кросс-соединение, чтобы получить все нужные вам строки.

SELECT c.COL1, f.COL2, t.COL3 
FROM tb1 c 
CROSS JOIN tb5 f 
LEFT JOIN tempt t ON t.COL1=c.COL1 and t.COL2=f.COL2 

Если tbl1.COL1 или tbl5.COL2 не являются уникальными, вам нужно будет добавить SELECT DISTINCT

Или, возможно, все это может быть свернута в:

SELECT c.COL1, f.COL2, SUM(a.colx1* l.clox2) AS COL3 
FROM tb1 c 
    CROSS JOIN tb5 f 
    LEFT JOIN tb2 b ON (c.id = b.idC) 
    LEFT JOIN tb3 l ON (b.id = l.idB) 
    LEFT JOIN tb4 a ON (a.id = l.idA and f.id = a.idF) 
GROUP BY c.COL1, f.COL2 
Смежные вопросы