内部加入的三个表

时间:2013-08-22 10:02:26

标签: mysql sql

我有以下三张表......

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

但是,如果我得到一般答案,我希望...谢谢

3 个答案:

答案 0 :(得分: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%正确,但这应该让你知道应该如何做。 根据{{​​1}}是否包含每个table3的条目,您可能需要将table1 id更改为t3.idb并在查询中将coalesce(t3.idb, t1.ida)更改为join你希望他们被复制。请记住,left join将来自table1)

答案 1 :(得分: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

答案 2 :(得分:0)

试试这可能会对你有所帮助

SQL中的三个表JOIN语法 这是一个连接三个或更多表的通用SQL查询语法。此SQL查询应该适用于所有主要关系数据库,例如MySQL,Oracle,Microsoft SQLServer,Sybase和PostgreSQL:

SELECT t1.col, t3.col FROM table1 join table2 ON table1.primarykey = table2.foreignkey
                                  join table3 ON table2.primarykey = table3.foreignkey

我们首先连接表1和表2,它们生成一个临时表,其中包含table1和table2的组合数据,然后将其连接到table3。这个公式可以扩展到3个以上的表到N个表,你只需要确保SQL查询应该有N-1个连接语句才能连接N个表。比如加入两个表,我们需要1个连接语句,加入3个表我们需要2个连接语句。