根据带有参数的选择(唯一键)从另一个表中插入值

Posted

技术标签:

【中文标题】根据带有参数的选择(唯一键)从另一个表中插入值【英文标题】:Insert values from another table based on select with parameters (unique keys) 【发布时间】:2016-11-17 02:07:35 【问题描述】:

我已在现有 table1 中添加了新列 (col7)。结构如下图所示。下面是生成表的 SQL 语句:

select year, month, quater, col4, col5, col6, col7 from table1

基于table2,我想将table1中的值更新到col7(将table2中的所有值插入table1)。

我的唯一键是:year-month-quater-col4-col5-col6

这是table2的结构:

在此更新之前我没有这样做。你能帮忙怎么做吗? 谢谢!

【问题讨论】:

UPDATE from SELECT using SQL Server的可能重复 【参考方案1】:

如果您在table2中有记录但在table1中缺少记录,则可以通过以下代码插入table1,除了@arpan desai提供的更新代码,您需要使用以下代码插入丢失的记录

INSERT INTO TABLE1 SELECT * FROM 
(SELECT  T2.year,T2.month,T2.quarter,T2.COL4,T2.COL5,T2.COL6,T2.COL7 FROM TABLE2 T2
EXCEPT
SELECT  T1.year,T1.month,T1.quarter,T1.COL4,T1.COL5,T1.COL6,T1.COL7 FROM TABLE1 T1) M

【讨论】:

谢谢!所以我会更新所有记录,然后运行你的代码【参考方案2】:

您可以使用以下查询

UPDATE T1 
SET T1.Col7 = T2.Col7
FROM table1 T1 
inner join table2 T2 on T1.Year = T2.Year AND T1.month = T2.month AND T1.quarter = T2.quarter AND T1.col4 = T2.col4 AND T1.col5= T2.col5 AND T1.col6 = T2.col6

参考以下链接 SQL Server - inner join when updating

【讨论】:

如果要将Table2中的所有记录插入到Table1中,可以使用insert select语句。 我想要更新值,如果记录在 table2 但在 table1 中丢失,也应该插入

以上是关于根据带有参数的选择(唯一键)从另一个表中插入值的主要内容,如果未能解决你的问题,请参考以下文章

使用外键关系更新从另一个表中选择的电子邮件

MySQL 在从另一个表中选择时插入到具有自动增量的表中

MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]

带有选择和硬编码值的 SQL 插入

从另一个表中选择带有主键的数据?

Oracle 反向主键