如何复制另一个表的记录

时间:2019-05-12 04:29:02

标签: mysql

我有x,y表

表x

Id       name.       wage    
1.       A.          10
2.       B.          12
3.       C.          13

表y

Id.      Bonus    
1.       5
3.       6

我想创建另一个表,但是具有表x的记录,但是在工资方面,我想为其添加奖金,因此输出如下:

Id       name.       wagebonus    
1.       A.          15    
2.       B.          12    
3.       C.          19

我尝试了

insert into newtable 
select id, name, wage+bonus from x, y

但是失败了

1 个答案:

答案 0 :(得分:1)

如果要创建新表,则需要一个CREATE TABLE命令,而不仅仅是INSERT。您查询的另一个问题是,它没有考虑到某人可能无法获得奖金这一事实,因此您需要使用LEFT JOIN而不是INNER JOIN来确保所有行x最终出现在新表中。这将满足您的要求:

CREATE TABLE newtable AS
SELECT x.Id, x.name, x.wage + COALESCE(y.bonus, 0) AS wagebonus
FROM x
LEFT JOIN y ON y.Id = x.Id;
SELECT * FROM newtable ORDER BY Id;

输出:

Id  name    wagebonus
1   A       15
2   B       12
3   C       19

请注意,为此创建一个新表可能是多余的。您可以对VIEW做同样的事情,包括在需要时添加ORDER BY子句:

CREATE VIEW newview AS
SELECT x.Id, x.name, x.wage + COALESCE(y.bonus, 0) AS wagebonus
FROM x
LEFT JOIN y ON y.Id = x.Id
ORDER BY Id;
SELECT * FROM newview

输出与上面相同。

Demo on dbfiddle