1

1対多の関係で接続された2つのテーブルがあります。
親テーブルは、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 1の保険選択をser_id残りのすべてのユーザー、つまり子テーブルの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

私が欲しいもの

INSERT INTO() SELECTユーザー数がそれを超えて増加する可能性があるため、4 つの異なるクエリを実行したくありません。ハードコーディングではなく、user_id を動的に選択する 1 つのクエリが必要です。

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 に答える