我有以下問題。我有以下 3 個表,我無法編輯它們。我有一個“主”表,我想加入“Table1”,我成功了(見小提琴)。下一步是加入“Table2”,但前提是 Charge-Name 組合尚不存在。如果不存在,則添加它并將 Factor 設定為 0。請參閱表“Desired result”了解我的目標。
http://sqlfiddle.com/#!9/fc7409/1
代碼:
SELECT Main.Charge,
Main.Id,
Table1.Name,
Table1.Factor
FROM Main
Left JOIN Table1
ON Main.Charge = Table1.Charge
表:
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 |
------ ---- ------ ------ -- ---- ------
uj5u.com熱心網友回復:
您可以嘗試對UNION ALL兩個結果集使用子查詢,一個是由Mainjoin制成的,Table1另一個是由Mainjoin制成的Table2。
Table2需要寫一列為Factor0
然后使用聚合函式得到你的結果。
查詢 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 |
uj5u.com熱心網友回復:
SELECT Main.Charge,
Main.Id,
Table2.Nom,
CASE WHEN Table2.Name = Table2.Nom
THEN Table1.Factor
ELSE 0
END CASE AS Factor
FROM Main
LEFT JOIN Table1
ON Main.Charge = Table1.Charge
LEFT JOIN Table2
ON Main.Id = Table2.ID
使用 CASE 陳述句,您可以根據在 WHERE 部分中使用的條件選擇不同的值。在這里,您可以使用它將“因子”結果設定為所需的值,具體取決于收費的現有名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/432589.html
上一篇:優化合并連接
下一篇:合并具有不同結構的表
