8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何从 SQL Server 中的 SELECT 进行更新?

Gunter Abreu 2月前

201 0

在 SQL Server 中,可以使用 INSERT 将行插入表中。SELECT 语句:INSERT INTO Table (col1, col2, col3)SELECT col1, col2, col3 FROM other_table WHERE sql = 'cool'Is i...

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
帖子版权声明 1、本帖标题:如何从 SQL Server 中的 SELECT 进行更新?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gunter Abreu在本站《sql-server》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 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 内部连接表 2 b 在 a.id = b.id; 相反,我必须使用更新表设置表.col1 = b.col2 从表 a 内部连接表 2 b 在 a.id = b.id;

  • 有点相关的是,我经常喜欢先将 UPDATE 查询编写为 SELECT 语句,以便在执行之前可以看到将要更新的数据。Sebastian 在最近的一篇博客文章中介绍了一种技术:sqlity.net/en/2867/update-from-select

  • 对于 MySQL db:UPDATE Table_A、Table_B SET Table_A.col1 = Table_B.col1 WHERE Table_A.id = Table_B.table_a_id

  • 在 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 还可用于“更新插入”记录;也就是说,如果匹配的记录存在,则更新;如果未找到匹配的记录,则插入新记录

  • bkw 2月前 0 只看Ta
    引用 10

    MERGE 也可用于 DELETE。但使用 MERGE 时要小心,因为 TARGET 表不能是远程表。

  • @SimonD:选择任何 SQL Server 关键字,您都会发现错误。你的观点是什么?我敢打赌,与 UPDATE 相关的错误(以及更基本的错误)比 MERGE 还多,人们已经学会了与它们共存,它们成为了景观的一部分(“功能”)。想想看,当 UPDATE 还是新手时,博客还不存在。

  • 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)(或任何其他聚合函数)。因此,就此目的而言,这比 Robin Day 的答案更好。

  • 我真的很喜欢这个解决方案,因为它感觉就像是对 INSERT ... SELECT 工作方式的自然补充。谢谢分享!

  • 引用 16

    我将 Robin 的出色回答 为以下内容:

    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 为 null 且 table.col1 不为 null) 或 (other_table.col2 为 null 且 table.col2 不为 null)

  • 引用 20

    取决于您是否想用源中的空值替换目标中的空值。通常我不会这么做。但如果您这么做,Martin 的 where 子句构造是最好的选择。

返回
作者最近主题: