Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从表A中选择ID后更新表b的sql_Sql_Sql Server_Database_Sql Server 2008_Select - Fatal编程技术网

从表A中选择ID后更新表b的sql

从表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

我有两张桌子

表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不应更新

我尝试了以下查询,但没有成功

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