こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

同じ構造の2つのテーブルで登録済みかを確認したい

あるデータベースの中に、テーブルAとテーブルBがあります。

テーブルAにはレコードが600件ほど登録されています。

テーブルBは、テーブルAと同じ構造を持ち、レコードが100件ほど登録されています。

この2つのテーブルについて、次のような動作を行うSQL文が知りたいです。

----------------------------------------------------
テーブルBの任意のレコードについて、「そのレコードのURLの値」と同じURLの値を持つレコードがテーブルAに登録されてない場合、レコードをAに登録する。

なお実行の際、比較するのはURLの値のみであり、URLが同じなら他の値が異なっても登録しないものとする。
----------------------------------------------------

たとえば、

テーブルA
NAME URL (フィールド名)
a aaa.com
b bbb.com
c ccc.com
d ddd.com
e eee.com


テーブルB
NAME URL (フィールド名)
d ddd.com
y eee.com
f fff.com
g ggg.com

としたとき、そのSQL文を実行すると、


テーブルA
NAME URL (フィールド名)
a aaa.com
b bbb.com
c ccc.com
d ddd.com
e eee.com
f fff.com
g ggg.com


となります。


最初はテーブルBをPHPで読み込み、レコード一つ一つを登録済みかチェックしてテーブルAに登録する、という方法を考えました。

しかし、SQLを使っている以上、もっといい方法があるのではないかと思い、質問させていただきました。

このような動作を行うSQL文をどなたか教えてください。

よろしくお願いします。

投稿日時 - 2012-03-10 01:54:31

QNo.7353110

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

テーブルAのURLにユニーク属性をつければあとは流し込むだけ

create table テーブルA(NAME varchar(10), URL varchar(20) unique key);
create table テーブルB(NAME varchar(10), URL varchar(20));

insert into テーブルA values('a','aaa.com'),('b','bbb.com'),('c','ccc.com'),('d','ddd.com'),('e','eee.com');
insert into テーブルB values('d','ddd.com'),('y','eee.com'),('f','fff.com'),('g','ggg.com');

//流し込み
insert ignore into テーブルA(NAME,URL) select NAME,URL from テーブルB;

投稿日時 - 2012-03-10 11:54:47

お礼

ありがとうございます。

投稿日時 - 2012-03-10 13:26:24

ANo.1

INSERT INTO テーブルA (NAME,URL,フィールド名)
SELECT NAME,URL,フィールド名 FROM テーブルB B
WHERE NOT EXISTS
(SELECT ' ' FROM テーブルA A WHERE A.URL=B.URL)
です。

投稿日時 - 2012-03-10 09:49:30

お礼

ありがとうございます。

投稿日時 - 2012-03-10 13:25:53

あなたにオススメの質問