SQL使用第二个表中的条件变量Retrival更新第一个表

SQL使用第二个表中的条件变量Retrival更新第一个表,sql,sql-server,Sql,Sql Server,我正试图通过以下逻辑更新T1表的statusId 使用(t2.statusId,其中t2.statusName=closed)更新t1.statusId 其中t1.RecordId=999 以下是我目前的查询: UPDATE [DB].[T1] SET [DB].[T1].StatusId = t1.StatusId FROM [DB].[T1] t1 LEFT JOIN [DB].[T2] t2 ON t1.StatusId = t2.StatusId

我正试图通过以下逻辑更新
T1
表的
statusId

使用(t2.statusId,其中t2.statusName=closed)更新t1.statusId
其中t1.RecordId=999

以下是我目前的查询:

UPDATE 
    [DB].[T1]

SET
    [DB].[T1].StatusId = t1.StatusId

FROM
    [DB].[T1] t1

LEFT JOIN [DB].[T2] t2
    ON t1.StatusId = t2.StatusId

WHERE t1.RecordId= 999

AND t2.StatusName = 'Closed'
Q:查询无法在
T1
中找到要更新的特定记录,因为它当前是
statusId
的记录,而不是
Closed
statusId

我认为我的
join
查询是错误的,我应该将
和t2.StatusName='Closed'
取出,以另一种方式进行处理。

我想你想要的是:

UPDATE T1
SET StatusID = (SELECT T2.StatusId FROM [SCHEMA].T2 WHERE T2.StatusName = 'Closed')
FROM [SCHEMA].T1 T1
WHERE T1.RecordId = 999;
您正在使用
T1
中行的当前状态加入到
T2
,这意味着您将只将已关闭的行更新为已关闭;使它成为一个毫无结果的更新


(我为对象使用了不同的名称(以及模式),因为
[DB].[T1]
令人困惑。因为
DB
将是一个模式,而不是一个数据库,而且这些显然是匿名的对象名。)

我想您正在寻找类似的东西:

UPDATE [DB].[T1]
SET StatusId = (
    SELECT StatusId
    FROM [DB].[T2]
    WHERE StatusName = 'Closed'
)
WHERE RecordId= 999
UPDATE t1
    SET StatusId = t2.StatusId
FROM [DB].[T1] t1 JOIN
     [DB].[T2] t2
     ON t1.RecordId = 999 AND
        t2.StatusName = 'Closed';

你应该像下面这样试试

UPDATE [DB].[T1]
SET StatusId = (
    SELECT top 1 StatusId
    FROM [DB].[T2]
    WHERE StatusName = 'closed'
)
WHERE RecordId= 999

注意:-您应该在子查询中选择top 1,否则它可能会返回多条记录,您将得到错误。

您可以使用
连接来执行此操作,但它看起来是这样的:

UPDATE [DB].[T1]
SET StatusId = (
    SELECT StatusId
    FROM [DB].[T2]
    WHERE StatusName = 'Closed'
)
WHERE RecordId= 999
UPDATE t1
    SET StatusId = t2.StatusId
FROM [DB].[T1] t1 JOIN
     [DB].[T2] t2
     ON t1.RecordId = 999 AND
        t2.StatusName = 'Closed';
或:


(两者完全相同。)

好的,那怎么了?你的问题是什么?更新了我的帖子。我道歉。