2013-03-13 91 views
0

我有兩個表(一個小,一個巨大)使用相同的唯一鍵,但不是相同的列。MYSQL INSERT從INNER JOIN獲取數據

我需要將大表中的兩列放入小表中,但僅適用於小表中存在的鍵。

當我查詢反對,我使用INNER JOIN

SELECT * FROM my_bigtable AS big 
    INNER JOIN my_smalltable AS small ON big.key = small.key; 

的偉大工程。但現在我已經添加了兩列(fname,lname)小表。大表有這些列,我想拉這些列中的條目以反映鍵,並將它們放在小表的列中。

INSERT INTO my_smalltable AS small 
    SELECT FNAME,LNAME FROM my_bigtable AS big 
    WHERE big.FNAME = small.FNAME 
     AND big.LNAME = small.LNAME; 

這是怎麼回事,只帶中存在的小桌子的小表的唯一鍵的記錄,或者如果唯一鍵的存在,將它從大表將一切的小桌子,不管小桌子?

回答

1

嘗試:

UPDATE small 
SET small.FNAME = big.FNAME, 
small.LNAME = big.LNAME 
FROM my_smalltable AS small 
JOIN my_bigtable AS big 
ON big.ID = small.ID 

(內)加入只會選擇中存在的小表中的記錄。

但my_smalltable和my_bigtable確實不應該使用相同的ID字段。他們應該各自擁有自己的主鍵。您可以在兩者之間使用外鍵。例如:

FROM my_smalltable AS small 
JOIN my_bigtable AS big 
ON big.bigID = small.bigID 

哪裏bigID是my_bigtable的主鍵,但在my_smalltable一個外鍵

+0

我覺得這個更新語句的語法是有效的(有自己的主鍵以及my_smalltable.smallID。)在SQL Server中不在MySQL中 – 2013-03-13 18:13:30

0

你需要UPDATE聲明不INSERT,試試這個:

update my_smalltable small 
INNER JOIN my_bigtable AS big ON small.key = big.key 
SET small.FNAME = big.FNAME, 
small.LNAME = big.LNAME