1

我有两张不相似的桌子。table2是否有某种方法可以仅在找到具有相似值的记录时插入记录table1php 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,然后如果id存在 a ,它将被插入。麻烦!

有没有办法做到这一点而不必先做 aselect然后 a insert

foreign key由于这只是开始,如果需要添加诸如等之类的内容,我愿意进行更改。

此处运行的唯一查询是insert into table2 (id) values (3). 只有id = 3table1. 该值3是用户提供的。

4

2 回答 2

1

ID如果在以下情况下是唯一的,这将起作用Table1

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

如果ID=3存在,Table1您将插入一行。如果没有,则不会插入任何内容。

如果ID不是唯一的,Table1只需添加DISTINCTSELECT

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 回答