0

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

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

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

这是否只会将小表中存在的唯一键的记录带到小表中,还是会将大表中的所有内容都带到小表中,而不管小表中是否存在唯一键?

4

2 回答 2

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。)

于 2013-03-13T18:09:23.307 回答
0

你需要UPDATE声明 not 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
于 2013-03-13T18:08:24.353 回答