我有以下三张表......
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
但是,如果我得到一般答案,我希望...谢谢
答案 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个连接语句。