2012-06-13 4 views
1

У меня есть две таблицы, связанные с одним отношением друг к другу.
родительской таблица простая таблица с идентификатором пользователя и first_name колонкойMYSQL копирует строки с разными идентификаторами

Parent

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

Смежные вопросы