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';
或:
(两者完全相同。)好的,那怎么了?你的问题是什么?更新了我的帖子。我道歉。