4

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

三个带内连接的表

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

我有下表...

**

任何想玩数据的人请在这里测试 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 没有问题,但是 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,如果可能的话来处理......

4

2 回答 2

7

试试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.

于 2013-08-23T09:38:31.113 回答
0

使用这样的查询

插入表 2(ColB,ColC) 从表 1 中选择 ColB,ColC,其中 IDA = '111'

于 2013-08-23T10:32:55.833 回答