我正尝试通过以下逻辑更新statusId
表中的T1
。
update t1.statusId with (t2.statusId where t2.statusName = closed)
where 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
而非{{ 1}}。
我认为我的statusId
查询是错误的,我应该将Closed
取出以另一种方式进行处理。
答案 0 :(得分:0)
我认为,这是你追求的:
UPDATE T1
SET StatusID = (SELECT T2.StatusId FROM [SCHEMA].T2 WHERE T2.StatusName = 'Closed')
FROM [SCHEMA].T1 T1
WHERE T1.RecordId = 999;
您正在使用T2
中行的当前状态加入T1
,这意味着您只会将已关闭的行更新为已关闭;使其毫无结果。
(由于[DB].[T1]
令人困惑,我为对象(好的模式)使用了不同的名称。由于DB
是模式而不是数据库,并且显然是匿名的对象名称。)< / p>
答案 1 :(得分:0)
我认为您正在寻找这样的东西:
UPDATE [DB].[T1]
SET StatusId = (
SELECT StatusId
FROM [DB].[T2]
WHERE StatusName = 'Closed'
)
WHERE RecordId= 999
答案 2 :(得分:0)
您应该尝试以下操作
UPDATE [DB].[T1]
SET StatusId = (
SELECT top 1 StatusId
FROM [DB].[T2]
WHERE StatusName = 'closed'
)
WHERE RecordId= 999
注意:-您应该在子查询中选择前1个,否则它可能会返回多个记录,并且会出现错误。
答案 3 :(得分:0)
您可以使用join
来执行此操作,但是它看起来像这样:
UPDATE t1
SET StatusId = t2.StatusId
FROM [DB].[T1] t1 JOIN
[DB].[T2] t2
ON t1.RecordId = 999 AND
t2.StatusName = 'Closed';
或者:
UPDATE t1
SET StatusId = t2.StatusId
FROM [DB].[T1] t1 CROSS JOIN
[DB].[T2] t2
WHERE t1.RecordId = 999 AND
t2.StatusName = 'Closed';
(两者相同。)