2013-08-20 45 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 ; 
相關問題