MYSQL复制具有不同ID的行

时间:2012-06-13 15:34:19

标签: mysql

我有两张桌子,有一对多的关系 父表是一个带有id和first_name列的简单用户表

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  

我想将u 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而不是硬编码。

1 个答案:

答案 0 :(得分: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的用户之外的所有用户插入保险数据。无论您有多少用户。希望有所帮助:)