【问题标题】:Update Query with Join and Where clause in joined table使用联接表中的 Join 和 Where 子句更新查询
【发布时间】:2016-04-18 05:53:39
【问题描述】:

我正在尝试更新一个加入另一个表的表,在论坛中找到了一些链接,仅参考以下链接是我准备的查询:

update WO 
    set WO.[Status] = 'Closed'
from [Work Orders] as WO
WHERE 
    wO.[Seq.HD #] IN (
        select [Incident #] 
        from Incident INC 
        where 
            INC.[Category Description] = 'test'
        and INC.Network = 'test'
    )
    and WO.[Category Description] in('test1', 'test2') 

不知道为什么,但它正在更新[Work Orders] 表中的所有记录。

任何帮助将不胜感激。

【问题讨论】:

  • 您可能会发现 [Work Orders] 表中的所有记录都与您的 where 子句匹配。如果您执行 select * FROM [Work Orders] as WO where wO.[Seq.HD #] in(select [Incident #] from Incident INC where INC.[Category Description] = 'test' and INC.Network = 'test ') 和 WO.[Category Description] in('test1', 'test2') 你得到你期望的结果了吗?
  • 嗨,卡梅伦,感谢您的回复。是的,当我触发 Select 语句时,我得到了所需的内容。但是当我使用相同的条件并更新表时,所有记录都会更新。
  • 我还注意到一件事,更新后它显示一条消息,即更新了 7 行,但有超过 20000 行符合上述条件,并且正在更新所有行(超过 100000)。
  • 你确定这些数字是正确的吗?我的意思是它显示 7 行,更新大约 1,000,000 和大约 20,000 匹配?我怀疑情况是否真的如此,因为这将表明 SQL 服务器存在严重问题。你怎么知道这个 SQL 脚本正在更新所有的行?会不会是其他一些更新行的脚本?
  • 这是一个生产数据库,一个本地开发数据库还是什么?

标签: join sql-server-2012


【解决方案1】:

牛油,

试试这个查询: 更新WO 设置 WO.[状态] = '关闭' 来自 [工单] 作为 WO 内部联接 ( 选择[事件#] 来自 Incident INC 在哪里 INC.[类别描述] = '测试' 和 INC.Network = '测试' )a on wO.[Seq.HD #]= a.[Incident #]

在哪里 WO.[类别说明] in('test1', 'test2')

【讨论】:

  • 嗨,Sunny,尝试了您的查询,但没有运气:(与我上面发布的结果相同。
【解决方案2】:

非常感谢您的回复。

这是我的错误:(我正在更新视图。

我已经用表格更新了查询,现在可以正常工作了。

非常抱歉给您带来不便。

问候, 牛油果

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 2012-06-11
    相关资源
    最近更新 更多