mysql - 在 MySQL 中,如何更新现有行的某些列并从引用表中插入新行?

标签 mysql sql insert left-join

以下将从引用表t2中获取值,我想插入或更新表t1中的现有元组:

SELECT 
  id, col1 
FROM 
  t2
LEFT OUTER JOIN 
  t1
ON 
  t2.id=t1.id

如果 t1 中已存在具有 id 的元组,则应使用从 t2 中选择的值对其进行更新。如果t1中不存在带有id的元组,则应插入(id, col1),并将其他列设置为默认值。

如何有效地做到这一点?

最佳答案

使用这两个查询:

这将连接和过滤,为您提供两个表中都存在的值,因此您只需执行更新

    Update t1 set t1.col1 = t2.col1
from t1 inner join t2 on t1.id = t2.id

这将连接和过滤,为您提供 t2 中的值,但不在 t1 中,因此您只需执行插入即可。

    insert into t1 select t2.id, t2.col1 
from t2 left outer join t1 on t2.id = t1.id where t1.id IS NULL

更新:

正如我从 here 中看到的,MySQL 为此使用了另一种语法。因此,您的查询可以使用此查询而不是上面的查询:

UPDATE t1 temp1
INNER JOIN t2 temp2
ON temp1.id= temp2.id 
SET temp1.col1= temp2.col1

但概念是相同的(只是语法不同) 您不需要Where,因为INNER JOIN将仅使用匹配/连接的字段。

关于mysql - 在 MySQL 中,如何更新现有行的某些列并从引用表中插入新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546785/

相关文章:

MySQL 选择其中行大于 1

java - X 天后从数据库中删除项目

mysql - 在 mysql 中使用 "insert into",#1054 - 字段列表中的未知列

sql - 关于 SQL 语句的语法,我错过了什么?

mysql - Yii CDbCriteria 根据另一个表的计数选择行

sql-server - 在 SQL Server 中,我可以将多个节点从一个表插入到 XML 中吗?

MySQL 说 : #1064 - You have an error in your SQL syntax creating a stored procedure

MySQL:从两个完全不同的表中选择最后更新

php - 多次插入时出现内存不足错误

MySQL SELECT 列,其中两列都是唯一的