从表A中选择ID后更新表b的sql
我有两张桌子 表A从表A中选择ID后更新表b的sql,sql,sql-server,database,sql-server-2008,select,Sql,Sql Server,Database,Sql Server 2008,Select,我有两张桌子 表A Pid Name 1 A 3 B 4 C 表B Pid Name Status 1 A 0 2 B 0 3 C 0 4 D 0 我想通过选择所有表A pid,将表B的状态从0更新为1 比如说。表A没有PId=2,因此表B的PId=2不应更新 我尝试了以下查询,但没有成功 U
Pid Name
1 A
3 B
4 C
表B
Pid Name Status
1 A 0
2 B 0
3 C 0
4 D 0
我想通过选择所有表A pid,将表B的状态从0更新为1
比如说。表A没有PId=2,因此表B的PId=2不应更新
我尝试了以下查询,但没有成功
UPDATE Table_B
SET
Status = 1
WHERE Table_B.Pid = (SELECT Table_A.Pid
FROM Table_A
WHERE Table_A.Pid = Table_B.Pid)
任何帮助都将不胜感激
谢谢即使在更新期间,您也可以使用内部联接
Update B
SET Status = 1
From Table_B as B
INNER JOIN Table_A as A
ON A.Pid = B.Pid
WHERE B.Status = 0
试试这个
UPDATE B
SET
Status = 1
from Table_B B
inner join Table_A A on A.pid = B.pid
WHERE B.Status = 0
尝试:
也许这是一个简化的例子,但我发现了两个问题。首先,名称列不应位于两个不同的位置-仅1个。第二,状态应该在需要时计算,而不是更新 所以它应该更像:
SELECT b.Pid,
b.Name,
CASE WHEN a.Pid IS NULL THEN 0 ELSE 1 END AS Status
FROM Table_B
LEFT JOIN (SELECT a.Pid
FROM Table_A
GROUP BY a.Pid) AS a
ON b.Pid = a.Pid
SELECT b.Pid,
b.Name,
CASE WHEN a.Pid IS NULL THEN 0 ELSE 1 END AS Status
FROM Table_B
LEFT JOIN (SELECT a.Pid
FROM Table_A
GROUP BY a.Pid) AS a
ON b.Pid = a.Pid