2013-03-13 92 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