【问题标题】:SQL update records in one table that satisify a query result on a related tableSQL 更新一张表中的记录,满足对相关表的查询结果
【发布时间】:2011-10-31 15:08:04
【问题描述】:

我正在尝试根据来自相关表的查询结果更新一个表中的许多记录。在此示例中,我在 tbl_events 中有 150 条记录,我想使用“entered_by”进行更新,为了获得这 150 条记录,我需要将选择与 tbl_locations 中的 150 条记录相匹配,在备注字段。 tbl_locations 中不存在“Entered_by”值,我只是试图根据关系前提条件更新表。但我收到以下错误:

UPDATE TBL_EVENTS 
SET Entered_By = 'Fred' 
FROM GRSTBL_EVENTS as sp
JOIN TBL_LOCATIONS as so
On sp.Location_ID = so.Location_ID
  AND so.Notes =(SELECT Notes from TBL_LOCATIONS where Notes = 'needs update')

消息 512,第 16 级,状态 1,第 1 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。 声明已终止。

【问题讨论】:

    标签: sql sql-server join sql-update


    【解决方案1】:

    你可以用在

    UPDATE TBL_EVENTS
    SET Entered_By = 'Fred'
    FROM GRSTBL_EVENTS as sp
    JOIN TBL_LOCATIONS as so
    On sp.Location_ID = so.Location_ID
    AND so.Notes  in (SELECT Notes from TBL_LOCATIONS where Notes = 'needs update')
    

    【讨论】:

    • 这个 IN 子句与 `so.Notes = 'needs update' 有何不同?
    【解决方案2】:

    如果我正确理解了您的数据结构,那么如果相关的 tbl_locations 表中有任何注释,您需要更新输入的字段。

    如果是这样,那么以下称为 correlated subquery 的代码应该可以满足您的需求

    UPDATE TBL_EVENTS 
    SET Entered_By = 'Fred' 
    WHERE EXISTS (
      SELECT 1 
      FROM   TBL_LOCATIONS 
      WHERE  TBL_LOCATIONS.Location_ID = TBL_EVENTS.Location_ID
      AND    TBL_LOCATIONS.Notes = 'needs update'
    )
    

    【讨论】:

      猜你喜欢
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多