2017-03-12 55 views
0

我有以下表和我需要加入它們:MySQL的 - 連接具有不同行數的3個表到另一

表A

+----+----------+--------+ 
| ID | Period | Value | 
+----+----------+--------+ 
| 1 |2009-02-01| 20.3 | 
| 2 |2009-03-01| 22.5 | 
| 3 |2009-04-01| 17.4 | 
| 4 |2009-05-01| 16.5 | 
| 5 |2009-06-01| 26.5 | 
| 6 |2009-07-01| 35.4 | 
+----+----------+--------+ 

表B

+----+----------+--------+ 
| ID | Period | Value | 
+----+----------+--------+ 
| 1 |2009-04-01| 57.1 | 
| 2 |2009-05-01| 56.5 | 
| 3 |2009-06-01| 59.8 | 
| 4 |2009-07-01| 55.4 | 
+----+----------+--------+ 

表C

+----+----------+--------+ 
| ID | Period | Value | 
+----+----------+--------+ 
| 1 |2009-03-01| 82.5 | 
| 2 |2009-04-01| 87.4 | 
| 3 |2009-05-01| 86.7 | 
+----+----------+--------+ 

我的輸出表已經創建的空表,看起來像這樣:

表d

+----+----------+--------+--------+--------+ 
| ID | Period | ValueA | ValueB | ValueC | 
+----+----------+--------+--------+--------+ 

表A包含了大部分的紀錄我想用它作爲主表。期望的結果是如下:

表d

+----+----------+--------+--------+--------+ 
| ID | Period | ValueA | ValueB | ValueC | 
+----+----------+--------+--------+--------+ 
| 1 |2009-02-01| 20.3 | NULL | NULL | 
| 2 |2009-03-01| 22.5 | NULL | 82.5 | 
| 3 |2009-04-01| 17.4 | 57.1 | 87.4 | 
| 4 |2009-05-01| 16.5 | 56.5 | 86.7 | 
| 5 |2009-06-01| 26.5 | 59.8 | NULL | 
| 6 |2009-07-01| 35.4 | 55.4 | NULL | 
+----+----------+--------+--------+--------+ 

我很新到MySQL。我在論壇上看到了類似的問題,試圖找出自己的想法,但沒有成功。

任何幫助表示讚賞。

ANSWER

確定。一些事情。首先問題不重複!這件事看起來更像是一個快速的主持人而不是重複的問題。不,我沒有在這個網站的任何地方找到這個答案,當然也沒有在主持人的回答中提出的建議。

現在有趣的部分。 花了幾個小時後,在創意版主的幫助下,終於找到了工作。正如我在原始問題中所說的,表D已經存在。這是因爲該模型是由第三方應用程序創建和管理的。在這種情況下,Django。這是一個重要的觀點,否則操作會有所不同。我在服務器上也有不止一個模式。 我認爲在這種情況下該查詢的最好方法是使用別名如下:

insert into my_schema.table_d(period, valueA, valueB, valueC) 
select A.Period, A.Value, B.Value, C.Value 
from my_schema.table_a A 

left join my_schema.table_b B 
on A.Period = B.Period 
left join my_schema.table_c C 
on A.Period = C.Period 
+0

這是什麼?誘餌投票? –

+0

@ Tiberiu-IonuţStan我所看到的只是格式良好的問題!它期望好的和明確的答案。你可能會說出你的名聲! – sretko

回答

0

你正在尋找一個left join

insert into d(. . .) 
    select . . . 
    from a left join 
     b 
     on a.period = b.period left join 
     c 
     on a.period = c.period; 

填寫在. . .是列。

+0

我試過這一個,但它返回沒有數據庫選擇的錯誤:'insert into d(句點,值1,值2,值3)從a左邊加入b選擇a.Period,a.Value,b.Value,c.Value。 Period = b.Period left join c on a.Period = c.Period' – sretko

相關問題