在 SQL Server 中,可以使用 INSERT… SELECT 语句将行插入到表中:
INSERT INTO Table (col1, col2, col3)
SELECT col1, col2, col3
FROM other_table
WHERE sql = 'cool'
是否也可以更新带有 SELECT 的表?我有一个包含这些值的临时表,并想使用这些值更新另一个表。也许是这样的:
UPDATE Table SET col1, col2
SELECT col1, col2
FROM other_table
WHERE sql = 'cool'
WHERE Table.id = other_table.id
保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com
UPDATE
Table_A
SET
Table_A.col1 = Table_B.col1,
Table_A.col2 = Table_B.col2
FROM
Some_Table AS Table_A
INNER JOIN Other_Table AS Table_B
ON Table_A.id = Table_B.id
WHERE
Table_A.col3 = 'cool'
如果您正在编辑表之间的链接 (SET Table.other_table_id = @NewValue),请将 ON 语句更改为 ON Table.id = @IdToEdit AND other_table.id = @NewValue
@CharlesWood 是的。我在 MySQL 中有同样的问题。如果有人知道如何将它实现到 MySQL 并与大家分享,那就太好了。相信很多人都在寻找 MySQL 版本的解决方案
如何在集合中使用别名?更新表集合 a.col1 = b.col2 从表 a 内连接 table2 b on a.id = b.id;相反,我必须使用 update table set table.col1 = b.col2 from table a inner join table2 b on a.id = b.id;
有点相关,我经常喜欢先将我的 UPDATE 查询写成 SELECT 语句,这样我就可以在执行之前看到将要更新的数据。 Sebastian 在最近的一篇博文中介绍了一种技术:sqlity.net/en/2867/update-from-select
您不能执行 SET Table_A.col1 = SUM(Table_B.col1) 或任何其他聚合。 Jamal 的回答允许您将聚合放在 SELECT stackoverflow.com/a/8963158/695671
huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式
在 SQL Server 2008(或更高版本)中,使用 MERGE
MERGE INTO YourTable T
USING other_table S
ON T.id = S.id
AND S.tsql = 'cool'
WHEN MATCHED THEN
UPDATE
SET col1 = S.col1,
col2 = S.col2;
或者:
MERGE INTO YourTable T
USING (
SELECT id, col1, col2
FROM other_table
WHERE tsql = 'cool'
) S
ON T.id = S.id
WHEN MATCHED THEN
UPDATE
SET col1 = S.col1,
col2 = S.col2;
MERGE 也可用于“Upserting”记录;也就是说,UPDATE 如果匹配记录存在,INSERT 新记录如果没有找到匹配
对我来说,这比等效的 update...join 语句快了大约 10 倍。
MERGE 也可以用来删除。但要小心 MERGE,因为 TARGET 表不能是远程表。
合并错误:mssqltips.com/sqlservertip/3074/…
@SimonD:选择任何 SQL Server 关键字,您都会发现错误。你的观点?我敢打赌,与 UPDATE 相关的错误(以及更基本的错误)比 MERGE 更多,人们刚刚学会与他们相处,他们成为景观的一部分(“功能”)。考虑到当 UPDATE 是新来的孩子时,博客还不存在。
与HuntsBot一起,探索全球自由职业机会–huntsbot.com
UPDATE YourTable
SET Col1 = OtherTable.Col1,
Col2 = OtherTable.Col2
FROM (
SELECT ID, Col1, Col2
FROM other_table) AS OtherTable
WHERE
OtherTable.ID = YourTable.ID
这往往适用于几乎所有 DBMS,这意味着一次学习,到处执行。如果这对您来说比性能更重要,您可能更喜欢这个答案,特别是如果您的更新是为了更正某些数据而一次性完成的。
如果您需要使用第二个表的聚合设置第一个表,您可以将聚合放在 select 子查询中,因为您不能执行 SET Table_A.col1 = SUM(Table_B.col1)(或任何其他聚合函数)。为此目的,比罗宾戴的答案要好。
我真的很喜欢这个解决方案,因为它感觉像是对 INSERT ... SELECT 工作方式的自然赞美。感谢分享!
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
我会将 Robin’s excellent answer 修改为以下内容:
UPDATE Table
SET Table.col1 = other_table.col1,
Table.col2 = other_table.col2
FROM
Table
INNER JOIN other_table ON Table.id = other_table.id
WHERE
Table.col1 != other_table.col1
OR Table.col2 != other_table.col2
OR (
other_table.col1 IS NOT NULL
AND Table.col1 IS NULL
)
OR (
other_table.col2 IS NOT NULL
AND Table.col2 IS NULL
)
如果没有 WHERE 子句,您甚至会影响不需要影响的行,这可能(可能)导致索引重新计算或触发真正不应该触发的触发器。
这假设没有任何列可以为空。
你是对的,我是手动输入示例的。我在 where 语句中添加了第三个和第四个子句来处理这个问题。
WHERE EXISTS(SELECT T1.Col1, T1.Col2 EXCEPT SELECT T2.Col1, T2.Col2)) 更简洁。
语句不应该在 where 子句中也包含这两个吗? (other_table.col1 为空且 table.col1 不为空)或(other_table.col2 为空且 table.col2 不为空)
取决于您是否想用源中的空值替换目标中的空值。很多时候,我不会。但是如果你这样做了,Martin 对 where 子句的构造是最好的使用方法。
huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。
单程
UPDATE t
SET t.col1 = o.col1,
t.col2 = o.col2
FROM
other_table o
JOIN
t ON t.id = o.id
WHERE
o.sql = 'cool'
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
尚未提及的另一种可能性是将 SELECT 语句本身放入 CTE,然后更新 CTE。
WITH CTE
AS (SELECT T1.Col1,
T2.Col1 AS _Col1,
T1.Col2,
T2.Col2 AS _Col2
FROM T1
JOIN T2
ON T1.id = T2.id
/*Where clause added to exclude rows that are the same in both tables
Handles NULL values correctly*/
WHERE EXISTS(SELECT T1.Col1,
T1.Col2
EXCEPT
SELECT T2.Col1,
T2.Col2))
UPDATE CTE
SET Col1 = _Col1,
Col2 = _Col2;
这样做的好处是,很容易首先单独运行 SELECT 语句以检查结果,但如果它们在源表和目标表中的名称相同,则需要您按上述方式对列进行别名。
这也与其他四个答案中显示的专有 UPDATE … FROM 语法具有相同的限制。如果源表位于一对多连接的多端,则不确定将在 Update 中使用哪个可能的匹配连接记录(如果存在,MERGE 通过引发错误来避免这个问题)是尝试多次更新同一行)。
CTE 这个名字有什么含义吗?
@ShivanRaptor - 它是 Common Table Expression 的首字母缩写。在这种情况下只是一个任意别名。
这也适用于多个 CTE:;WITH SomeCompexCTE AS (...), CTEAsAbove AS (SELECT T1.Col1,... FROM T1 JOIN SomeComplexCTE...) UPDATE CTEAsAbove SET Col1=_Col1, ...
huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!
作为记录(以及其他像我一样搜索的人),您可以在 MySQL 中这样做:
UPDATE first_table, second_table
SET first_table.color = second_table.color
WHERE first_table.id = second_table.foreign_id
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
使用别名:
UPDATE t
SET t.col1 = o.col1
FROM table1 AS t
INNER JOIN
table2 AS o
ON t.id = o.id
一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会
简单的方法是:
UPDATE
table_to_update,
table_info
SET
table_to_update.col1 = table_info.col1,
table_to_update.col2 = table_info.col2
WHERE
table_to_update.ID = table_info.ID
这不是 SQl Server 语法,它在 SQL Server 中不起作用
huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求
这可能是执行更新的一个利基原因(例如,主要用于过程中),或者对其他人来说可能很明显,但也应该说明您可以在不使用连接的情况下执行更新选择语句(如果您正在更新的表没有公共字段)。
update
Table
set
Table.example = a.value
from
TableExample a
where
Table.field = *key value* -- finds the row in Table
AND a.field = *key value* -- finds the row in TableExample a
我觉得这应该是公认的答案,因为它使事情变得简单明了。
huntsbot.com – 高效赚钱,自由工作
这是另一个有用的语法:
UPDATE suppliers
SET supplier_name = (SELECT customers.name
FROM customers
WHERE customers.customer_id = suppliers.supplier_id)
WHERE EXISTS (SELECT customers.name
FROM customers
WHERE customers.customer_id = suppliers.supplier_id);
它通过使用“WHERE EXIST”检查它是否为空。
唯一对我有用的答案。我正在使用 MariaDB,我的查询格式为:SELECT value FROM table_1 INNER JOIN ( SELECT * FROM table_2 WHERE ..... ) ON ( ...... )
原文链接:https://www.huntsbot.com/qa/jW7l/how-do-i-update-from-a-select-in-sql-server?lang=zh_CN
打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!
转自:https://juejin.im/entry/57fb07255bbb50005b2f20acjava内存泄露典型特征现象一: 堆/Perm 区不断增长, 没有下降趋势(回收速度赶不上增长速度), 最后不断触发FullGC, 甚至crash(如下**两张图是同一个应用的GC和Perm数据, GC触发原因确认是Perm不足**) . 一般是现象二的晚期表现.现象二:每次Full...
一、原理转自:http://www.2cto.com/kf/201401/275838.htmlAndroid动画学习Demo(3) 沿着贝塞尔曲线移动的Property AnimationProperty Animation中最重要,最基础的一个类就是ValueAnimator了。Property Animation利用ValueAnimator来跟踪记录对象属性已经变化了多长时间及当前这个时间...
本文实例讲述了PHP实现获取第一个中文首字母并进行排序的方法。分享给大家供大家参考,具体如下:最近在做储值结算,需求里结算首页需要按门店的首字母A-Z排序。我的数据结构原本是这样的:Array( [0] => Array ( [sid] => 2885842 [recetcstoredpay] => 24000 [recetclprinciple] => 23465 [paytcstoredpay] => 545
本文转载自: 堆和栈的区别一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,...
在网上找了安装gcc教程,第一次找的怎么也安装不成功,第二次成功了,还简单,写一下吧链接:https://pan.baidu.com/s/1C63PdlWMGkIOHjezuB5pjQ提取码:ynw71.下载安装,可以用我放在上面的,也可去MinGW的主页去找最新版本2.运行Download mingw-get-setup.exe,点击运行,countinue,记住自己的安装目录,下一步修改环境变量会用到3.修改环境变量:在系统变量path中添加刚刚记录的路径,如 E:gcc\MinGw\bin
(本博客所有关于32的文章都是基于stm32f103c8t6)GPIO初识——理论讲解GPIO的工作模式四种输入模式上拉输入:若GPIO引脚配置为上拉输入模式,在默认情况下(GPIO引脚无输入),读取 得的GPIO引脚数据位1,高电平。下拉输入:若GPIO引脚配置为下拉输入模式,在默认情况下(GPIO引脚无输入),读取 得的GPIO引脚数据位0,低电平。浮空输入:在芯片内部既没有接上拉,也没有接下拉电阻,经由触发器输入。配置成这个模式直接用电压表测量其引脚电压为1点几伏,这是个不确定值。
【问题记录】java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class pathSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/C:/Users/liulei06/.m2/repository/org/slf4j/slf4j-
还好之前研究了一下,现在拿来就用,不知道以前怎么弄的,现在都给忘了,回忆一下。旋转代码:设置固定角度:轻松搞定。
该楼层疑似违规已被系统折叠隐藏此楼查看此楼用简单的printf能编写出来,就是写的多了点.#includemain(){inti,j,k,s;printf("pleaseenteryearandweek:");scanf("%d",&i);printf("\n");scanf("%d",&j);clrscr();if((13%7+j-1)%7==5)printf("%...
Apache ab介绍 : Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具注: centos6 默认安装 ab安装命令yum install y httpd-tools查看帮助手册ab --help
我与Magento2工作,有问题,我的变化是后一个完整的才可见php bin/magento setup:static-content:deploy en_US。先决条件:Magento的2.1.0Linux的虚拟机与Apache / PHP7开发模式激活缓存无效,刷新我换了一个HTML文件自定义模块中的KO-模板,并试图看到前台的变化没有一个完整的静态部署。但它仍然显
流程控制1顺序结构顺序结构是程序中最简单的流程控制,没有特定的语法结构,按照代码的先后顺序依次执行。2.分支结构单分支if语句格式:if (关系表达式){语句体;}if-else双分支结构if (){} else {}if-else多分支结构格式if(关系表达式){; }else if (关系…){;}else{}3.switch语句格式:(伪代码)switch(表达式){case 值1: 语句体1; break;case 值2: 语句体2