2012-06-13 63 views
1

我有兩個表連接一對多的關係。
父表是通過ID和FIRST_NAME列MYSQL複製具有不同ID的行

家長

id | first_name  
1 | Bob 
2 | Dick 
3 | Harry 
4 | Tom 
5 | Holly 

子表包含了用戶選擇的保險簡單的用戶表。

兒童

id | insu_id  | user_id | year 
1 | 188765  | 1   | 2008 
2 | 188765  | 1   | 2009 
3 | 188765  | 1   | 2010 
4 | 188765  | 1   | 2011 
5 | 188765  | 1   | 2012 

我想üser_id 1的保險選擇複製到用戶的所有休息即2,3,4,5子表,使表看起來應該像

id | insu_id  | user_id | year 
1 | 188765  | 1   | 2008 
2 | 188765  | 1   | 2009  
3 | 188765  | 1   | 2010 
4 | 188765  | 1   | 2011 
5 | 188765  | 1   | 2012 
6 | 188765  | 2   | 2008 
7 | 188765  | 2   | 2009 
8 | 188765  | 2   | 2010 
9 | 188765  | 2   | 2011 
10 | 188765  | 2   | 2012 
11 | 188765  | 3   | 2008 
12 | 188765  | 3   | 2009 
13 | 188765  | 3   | 2010 
14 | 188765  | 3   | 2011 
15 | 188765  | 3   | 2012 
16 | 188765  | 4   | 2008 
17 | 188765  | 4   | 2009 
18 | 188765  | 4   | 2010 
19 | 188765  | 4   | 2011 
20 | 188765  | 4   | 2012 
21 | 188765  | 5   | 2008 
22 | 188765  | 5   | 2009 
23 | 188765  | 5   | 2010 
24 | 188765  | 5   | 2011 
25 | 188765  | 5   | 2012 

我能做些什麼

INSERT INTO child(insurance_id, user_id, year) SELECT insurance_id, '2', year FROM child WHERE user_id = 1 

INSERT INTO child(insurance_id, user_id, year) SELECT insurance_id, '3', year FROM child WHERE user_id = 1 

INSERT INTO child(insurance_id, user_id, year) SELECT insurance_id, '4', year FROM child WHERE user_id = 1 

INSERT INTO child(insurance_id, user_id, year) SELECT insurance_id, '5', year FROM child WHERE user_id = 1 

我想要什麼

我不想運行4個不同的INSERT INTO() SELECT查詢,因爲用戶數量可能會增加。我想要一個查詢動態選擇user_id而不是硬編碼。

回答

2

我試過了,它似乎工作。我從第一個用戶的子表中獲取保險數據,並將其與父表中的所有其他用戶結合以插入結果。如果列名與您的數據庫不一致,您可能需要修正它們。

INSERT INTO child(insurance_id, user_id, year) 
SELECT a.insurance_id, b.id, a.year 
FROM 
child a, parent b 
WHERE a.user_id = 1 AND b.id > 1 
ORDER BY b.id, a.year 

這將始終爲除ID = 1的用戶以外的所有用戶插入保險數據。無論他們有多少人。希望有所幫助:)

+0

太棒了!!!這就像一個魅力,是的,我不得不改變列的名字,以真正的:-) +++++ – Rahi

相關問題