我在这里问过类似的问题......
但是我没有得到足够的答案来解决我的问题,所以我不得不重新提问...
我有下表...
**
anyone who want to play on the data please test it here 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 复制或插入到 table to 没有问题,但是 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,如果可能的话处理...
最佳答案
尝试使用 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
并且由于整个 ext/mysql PHP
扩展,尽量避免 mysql_*
语句,它提供了所有以前缀 mysql_*
命名的函数>,自 PHP v5.5.0
起正式弃用,并将在未来删除。
还有另外两个 MySQL
扩展可以更好地使用:MySQLi
和 PDO_MySQL
,其中任何一个都可以代替 ext/mysql
.
关于php - MySQL存在则更新,不存在则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18399544/