2012-02-29 131 views
1

UPDATE我使用MySQL的INSERT INTO...SELECT结构:INSERT INTO ... SELECT,并从SELECT

INSERT INTO some_table (col1, col2, col3) 
    SELECT otbl.col4, obtl.col5, atbl.col6 FROM other_table otbl 
    INNER JOIN another_table atbl 
     ON atbl.id = otbl.some_id 
    WHERE obtl.col7 = 0; 

在相同的查询,我想col7 = 1 “的切换” 的任何地方SELECT匹配。可能?

+0

难道我理解你的权利,你希望你的语句_also_ UPDATE obtl.col7 1当你的INSERT INTO some_table发生什么呢? – yhw42 2012-02-29 05:10:44

+0

@ yhw42,是的!究竟。并且INSERT必须在更新之前使用WHERE obt1.col7,显然。 – Kyle 2012-02-29 05:17:43

+0

...嗯我在“两个查询+交易”阵营中使用Umbrella ...你能解释一下为什么这对你不起作用吗? – yhw42 2012-02-29 05:25:50

回答

3

我相信答案是没有。我想做类似的事情,比如在选择他们的细节时更新用户的登录时间。在你的情况下,你将不得不有两个查询,更新是次要的。如果您需要确保它们之间不发生任何事情,请考虑事务。

+0

+1,但是当表变大时,一个查询总是优于两个。你可能是对的。为了以防万一,我会留下这个问题。 – Kyle 2012-02-29 05:41:36

1

在other_table创建触发器像

other_table

CREATE TRIGGER other_Trigger 
AFTER insert ON some_table 
FOR EACH ROW 
BEGIN 
update other_table set col7=1 where some.id=new.id 
END