我有两张桌子,有一对多的关系 父表是一个带有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而不是硬编码。
答案 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的用户之外的所有用户插入保险数据。无论您有多少用户。希望有所帮助:)