[前][次][番号順一覧][スレッド一覧]

mysql:5988

From: KAWAJI Shinya <KAWAJI Shinya <kawaji@xxxxxxxxxx>>
Date: Sun, 25 Aug 2002 01:53:11 +0900
Subject: [mysql 05988] Re: table_b のフィールド a の値が、 table_a のフィールド a にないレコードに関してだけ insert したい。

かわじ、です。


> table_b のaの値が、table_a のaにないレコードに関してだけ、
> table_b のa,c の値をtable_a のa,bにinsertしたいのですが、
> うまい方法はないでしょうか?
> 
> 気持ちとしては、
> INSERT INTO table_a(a,b) select a,c from table_b;
> としたいのですが、これだとすでにtable_aにあると
> Duplicate entry エラーになってしまいます。
> 
> table_bのテーブルを一行づつチェックしてtable_aにないか確認して1行づつ
> insertしていくしかないんでしょうか?


TEMPORARY TABLE を使う方法もあります。


mysql> CREATE TABLE table_a (
    ->   a char(200) NOT NULL,
    ->   b char(200),
    ->   PRIMARY KEY  (a)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE table_b (
    ->   a char(200) NOT NULL,
    ->   b char(200),
    ->   c char(200),
    ->   PRIMARY KEY  (a)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT table_a VALUES
    ->   ('a1', 'b1'),
    ->   ('a3', 'b3'),
    ->   ('a5', 'b5')
    -> ;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> INSERT table_b VALUES
    ->   ('a1', 'b1', 'c1'),
    ->   ('a2', 'b2', 'c2'),
    ->   ('a3', 'b3', 'c3'),
    ->   ('a4', 'b4', 'c4'),
    ->   ('a5', 'b5', 'c5')
    -> ;
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> CREATE TEMPORARY TABLE tmp SELECT table_b.a, table_b.c FROM table_b
    ->   LEFT JOIN table_a USING (a) WHERE table_a.b IS NULL
    -> ;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> INSERT table_a SELECT * FROM tmp;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM table_a;
+----+------+
| a  | b    |
+----+------+
| a1 | b1   |
| a3 | b3   |
| a5 | b5   |
| a2 | c2   |
| a4 | c4   |
+----+------+
5 rows in set (0.00 sec)


--
Shinya Kawaji



[前][次][番号順一覧][スレッド一覧]

      5987 2002-08-25 01:06 [takewo.k <office@xxx] table_b のフィールド a の値が、 table_a  のフィールド a にないレコードに関してだけ insert したい。
->    5988 2002-08-25 01:53 ┣[KAWAJI Shinya <kawaj]                                       
      5990 2002-08-25 04:45 ┗[東海林 裕 <shojihiro]                                       
      5991 2002-08-25 15:21  ┗[<office@xxxxxxxxxx> ]