我有两个表(一个小,一个巨大)使用相同的唯一键,但不是相同的列。
我需要将大表中的两列放入小表中,但仅用于小表中存在的键。
当我查询它时,我使用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;
这是否只会将小表中存在的唯一键的记录带到小表中,或者它是否会将大表中的所有内容带入小表中,无论小表中是否存在唯一键?
答案 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