2013-08-20 44 views
1

我有两个不相似的表。只有在table1中找到具有类似值的记录时,我才能通过某种方法将记录插入table2?我做这一切都是php pdomysql仅当表1中存在类似记录时才插入表2.

例如: 比方说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 

眼下,方式我这样做是运行一个select count(id) where id = 3,然后如果id存在,它会被插入。繁琐!

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

由于这仅仅是个开始,如果需要添加诸如foreign key等等,我愿意进行更改。

这里运行的唯一查询是insert into table2 (id) values (3)。而且只有在table1中找到id = 3时,该功能才有效。值为3是用户提供的。

+0

http://stackoverflow.com/questions/5907206/mysql-insert-into-tbl-select-from-another -table-and-some-default-values – Nils

+0

这是完全不同的。我试图在table2中插入一个值,只有当table1中存在具有该id值的行时。不从table1中选择到表2 – Norman

回答

1

如果ID是独一无二的Table1这将工作:

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

如果存在Table1ID=3你会得到一个行插入。如果不是,则不会插入任何内容。

如果IDTable1独特只需添加DISTINCTSELECT

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

是的。 Id是独一无二的。 – Norman

+0

好。那么我会和第一个例子一起去。有了独特的或PK约束,它将会很快。如果您需要插入其他值,您可以将它们作为常量添加到'SELECT'列表中,例如:'INSERT INTO Table2(ID,Name)SELECT ID,'Norman'FROM Table1 WHERE ID = 3' –

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 ; 
相关问题