1

我有两个以一对多关系连接的表。
Parent Table 是一个简单的用户表,带有 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_id1 的保险选择复制到所有其他用户,即子表中的 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 而不是硬编码。

4

1 回答 1

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

于 2012-06-13T15:56:52.130 回答