1

似ていない2つのテーブルがあります。table2同様の値を持つレコードが に見つかった場合にのみ、レコードを に挿入できる方法はありtable1ますか? 私はこれをすべてやっていphp pdoますmysql

例: 次table1のような値があるとし ましょう:

id
--
1
2
3
4
6

それで:

insert into table2 (id) values (3) // Will work, because id 3 exists in table1
insert into table2 (id) values (7) // Will not work, because id 7 does not exists in table1

現在、私がこれを行う方法は、 a を実行することでselect count(id) where id = 3あり、 aidが存在する場合は挿入されます。面倒!

最初に a を実行してから を実行しなくても、これを行う方法はありselectますinsertか?

foreign keyこれはまだ始まったばかりなので、aなどのようなものを追加する必要がある場合は、喜んで変更します。

ここで実行される唯一のクエリはinsert into table2 (id) values (3). が にある場合にのみ動作する必要がid = 3ありtable1ます。値3はユーザーが指定します。

4

2 に答える 2

1

IDが で一意の場合、これは機能しTable1ます。

INSERT INTO Table2 (ID)
  SELECT ID
  FROM Table1
  WHERE ID = 3;

ID=3存在する場合Table1は、1 行が挿入されます。そうでない場合は、何も挿入されません。

に追加するだけIDで一意でない場合:Table1DISTINCTSELECT

INSERT INTO Table2 (ID)
  SELECT DISTINCT ID
  FROM Table1
  WHERE ID = 3;
于 2013-08-20T12:54:37.170 に答える
0

トリガーを作成する

DELIMITER $$
CREATE
DEFINER = CURRENT_USER
TRIGGER `table2_check` BEFORE INSERT
ON table1
FOR EACH ROW BEGIN
if exists (select id from table1 where id = new.id) then
    insert into table2 (id) values (new.id);
end if;
END$$
DELIMITER ;
于 2013-08-20T12:54:30.020 に答える