0

我有以下三个表...

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,我可以使用以下简单的 MySQL 查询来做到这一点......

INSERT INTO table2 SELECT * FROM table1

问题是我的 id 类型不同,...这两个表通过第三个表 table3 连接。其中 IDA 包含 table1 主键,IDB 包含 table2 主键,

所以,例如,如果我想从 table1 IDA(111) 复制到 table2 我该怎么做?如果 IDB 存在,我该如何更新 Duplicate Key ...

我有以下查询,但没有工作...

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

但是,我希望如果我能得到概括的答案......谢谢

4

2 回答 2

1
INSERT INTO table2 
SELECT 
    t3.idb
    ,t1.colb as ncolb
    ,t1.colc as ncolc
FROM 
    table1 t1
    join table3 t3
    on t1.ida = t3.ida
ON DUPLICATE KEY UPDATE
    colb = ncolb
    ,colc = ncolc

我现在没有 MySQL,所以语法可能不是 100% 正确,但这应该让你知道它应该如何完成。根据是否table3有每个条目,如果您希望复制它们,table1 id您可能需要在查询中更改t3.idbcoalesce(t3.idb, t1.ida)更改joinleft join请记住,这table2将具有来自 table1 的 id)

于 2013-08-22T10:15:29.810 回答
0
INSERT INTO table2 SELECT * FROM table1 
WHERE IDA IN ( SELECT * FROM table1 b 
INNER JOIN table3 c ON c.IDA = b.IDA 
INNER JOIN table2 a ON a.IDB = c.IDB ) HAVING b.IDA=111
于 2013-08-22T10:14:54.367 回答