MYSQL INSERT从INNER JOIN获取数据
问题描述:
我有两个表(一个小,一个巨大)使用相同的唯一键,但不是相同的列。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;
这是怎么回事,只带中存在的小桌子的小表的唯一键的记录,或者如果唯一键的存在,将它从大表将一切的小桌子,不管小桌子?
答
尝试:
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一个外键
答
你需要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
我觉得这个更新语句的语法是有效的(有自己的主键以及my_smalltable.smallID。)在SQL Server中不在MySQL中 – 2013-03-13 18:13:30