2013-08-22 56 views
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 

我需要的是從表1複製到表2,我可以使用下列簡單的MySQL查詢這樣做...

INSERT INTO table2 SELECT * FROM table1 

問題是我不是相同的id類型,...兩個表通過第三個表table3連接。 其中IDA包含table1主鍵和IDB包含table2主鍵,

因此,例如,如果我想從table1 IDA(111)複製到table2我該怎麼做? 如果IDB存在如何在重複鍵更新...

我有以下查詢,但沒有工作......

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

看到這篇文章,這將幫助你http://dba.stackexchange.com/questions/10472/join-three-tables – krishna

回答

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 
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.idb更改爲coalesce(t3.idb, t1.ida),並在查詢中將join更改爲left join(如果您希望複製它們)。請記住,table2就可以從表1 IDS)

0

試試這個,這可能幫助你

三表連接語法SQL 下面是一個普通的SQL查詢語法聯接三個或多個表。這個SQL查詢應該適用於所有主要的關係數據庫MySQL和甲骨文,微軟的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中產生的臨時表與表1和表2組合的數據,然後將其加入到表3。這個公式可以擴展到3個以上的表格到N個表格,你只需要確保SQL查詢應該有N-1個連接語句才能連接N個表格。就像加入兩個表一樣,我們需要1個連接語句,而連接3個表需要2個連接語句。