如果存在则更新,如果MySQL中不存在则插入行

时间:2013-08-23 09:35:36

标签: php mysql sql

我在这里问了类似的问题......

three tables with Inner Join

但是我无法得到足够的答案来解决我的问题,所以我不得不再次提问......

我有下表...

**

  

任何想要播放数据的人请在此处http://sqlfiddle.com/#!9/a0807

进行测试

**

Table1
IDA    colB    colC    
111       a       w    
222       b       w    
333       c       s        
444       b       g    



Table2
IDB    colB    colC    
11       w       f    
12      w       r    
13      s       g    



Table3
IDA     IDB       
111     11         
222     12           
333     13       
444     14

以下代码将从table1复制或插入到表中以解决问题,但错误的table2 IDB(因为table2 IDB值应该来自内部联接到table3)

INSERT INTO table2 SELECT * FROM table1 WHERE IDA = 111

但是将所有从table1复制到table2,这是错误的......

所以,我做的是......以下的内部联接......但是没有工作......

INSERT INTO table2
(SELECT * FROM table1 b 
LEFT JOIN table3 c ON c.IDA = b.IDA  
LEFT JOIN table2 a ON a.IDB = c.IDB)
WHERE IDB = 111

那也不起作用......

但是,我需要的是......我想从table1复制到table连接到table3,如果行可用则更新,如果不插入....

很抱歉两次问,但我是亲戚从你们那里得到一些想法......

请帮助...提前感谢...

可能正在使用php,如果可能的话......

2 个答案:

答案 0 :(得分:6)

尝试ON DUPLICATE KEY喜欢

$sql = "INSERT INTO `table2` (Col2, Col3) 
VALUES ('val1', 'val2')
ON DUPLICATE KEY UPDATE
Col2='val1', Col3='val2'";

编辑:

INSERT INTO table2 (ColB , ColC)
(SELECT ColB.b,ColC.b FROM table1 b 
    LEFT JOIN table3 c ON c.IDA = b.IDA  
    LEFT JOIN table2 a ON a.IDB = c.IDB
 WHERE IDB = 111
)
ON DUPLICATE KEY UPDATE
ColB = ColB.b   
ColC = ColC.b

并且由于整个mysql_*扩展程序(提供名称前缀为ext/mysql PHP的所有函数)从mysql_*开始正式弃用,因此请尽量避免使用PHP v5.5.0语句。 将来删除

您可以更好地使用其他两个MySQL扩展程序:MySQLiPDO_MySQL,其中任何一个都可以用来代替ext/mysql

答案 1 :(得分:0)

使用像这样的查询

INSERT INTO Table2(ColB,ColC)SELECT ColB,ColC FROM Table1 WHERE IDA ='111'