mysql - 如何复制另一个表的记录

标签 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

但是失败了

最佳答案

如果要创建新表,则需要 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

关于mysql - 如何复制另一个表的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096232/

相关文章:

mysql - 根据第二个表中输入的值更新 MYSQL 表

php - 如何将实际的 NULL 值插入到可为空的列中?

PHP动态下拉列表

php - 如何在 if(isset) 语句中使用 PHP 获取 URL 参数以更新表单

php - 来自 MySQL 结果的多维数组

mysql - 从不包括排序目的列的查询中选择不同的值

mysql |计数标签

php - 带有日期的数据库字段保持为空

python - 创建一个允许用户选择日期过滤的 View /模板,其中包括子对象的总计?

mysql 左连接多个表,只有主键作为第一个表的外键