MYSQL INSERT从INNER JOIN获取数据

时间:2013-03-13 18:03:46

标签: mysql

我有两个表(一个小,一个巨大)使用相同的唯一键,但不是相同的列。

我需要将大表中的两列放入小表中,但仅用于小表中存在的键。

当我查询它时,我使用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;

这是否只会将小表中存在的唯一键的记录带到小表中,或者它是否会将大表中的所有内容带入小表中,无论小表中是否存在唯一键?

2 个答案:

答案 0 :(得分: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中的外键(它有自己的主键以及my_smalltable.smallID。)

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