I have the following problem. I have the following 3 tables, I can’t edit those. I have a “main” table I would like to join “Table1” to, I succeeded (see fiddle). The next step is to join “Table2”, but only when the Charge-Name combination does not exist yet. If it doesn’t exists add it and set Factor to 0. See table “Desired result” for my goal.
http://sqlfiddle.com/#!9/fc7409/1
Code:
SELECT Main.Charge, Main.Id, Table1.Name, Table1.Factor FROM Main Left JOIN Table1 ON Main.Charge = Table1.Charge
Tables:
Main Table1 Table2 Desired result +------+--+ +------+----+------+ +--+----+ +------+--+----+------+ |Charge|Id| |Charge|Name|Factor| |ID|Nom | |Charge|ID|Name|Factor| +------+--+ +------+----+------+ +--+----+ +------+--+----+------+ | 1001 |5 | | 1001 |ZZZ | 12 | |5 |ZZZ | | 1001 |5 |ZZZ | 12 | | 1002 |8 | | 1001 |XXX | 25 | |5 |XXX | | 1001 |5 |XXX | 25 | | 1003 |10| | 1002 |AAA | 15 | |5 |OOO | | 1001 |5 |OOO | 0 | | 1006 |5 | | 1003 |YYY | 1 | |8 |AAA | | 1002 |8 |AAA | 15 | +------+--+ | 1003 |BBB | 32 | |10|YYY | | 1003 |10|YYY | 1 | | 1006 |ZZZ | 9 | |10|UUU | | 1003 |10|BBB | 32 | | 1006 |XXX | 14 | |21|PPP | | 1003 |10|UUU | 0 | | 1006 |RRR | 57 | +--+----+ | 1006 |5 |ZZZ | 9 | | 1011 |TTT | 11 | | 1006 |5 |XXX | 14 | | 1011 |SSS | 1 | | 1006 |5 |RRR | 57 | +------+----+------+ +------+--+----+------+
Advertisement
Answer
You can try to use a subquery to UNION ALL
two result sets, one is made from Main
join Table1
another is made from Main
join Table2
.
Table2
need to write a column for Factor
be 0
Then use the aggregate function to get your result.
Query 1:
SELECT Charge,ID,Name,SUM(Factor) Factor FROM ( SELECT m.Charge,m.ID,t1.Name , t1.Factor FROM `Main` m INNER JOIN `Table1` t1 ON m.Charge = t1.Charge UNION ALL SELECT m.Charge,t2.ID,t2.Nom , 0 Factor FROM `Main` m INNER JOIN `Table2` t2 ON m.ID = t2.ID ) t1 GROUP BY Charge,ID,Name ORDER BY Charge
| Charge | ID | Name | Factor | |--------|----|------|--------| | 1001 | 5 | ZZZ | 12 | | 1001 | 5 | XXX | 25 | | 1001 | 5 | OOO | 0 | | 1002 | 8 | AAA | 15 | | 1003 | 10 | YYY | 1 | | 1003 | 10 | UUU | 0 | | 1003 | 10 | BBB | 32 | | 1006 | 5 | ZZZ | 9 | | 1006 | 5 | XXX | 14 | | 1006 | 5 | RRR | 57 | | 1006 | 5 | OOO | 0 |