Sql 使用主键和外键从另一个表更新表中所有行的列

Sql 使用主键和外键从另一个表更新表中所有行的列,sql,sql-server,Sql,Sql Server,我有一个使用主键和外键关系更新列中所有行的查询,但错误是: Msg 512,16级,状态1,第1行 子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情。声明已终止 我的问题是: Update T_OP Set DOCID = (Select DocID from T_Reg_Patients) where Fk_RegID = (Select Pk_RegID from T_Reg_Patients) 表1: Pk_RegID Name

我有一个使用主键和外键关系更新列中所有行的查询,但错误是:

Msg 512,16级,状态1,第1行

子查询返回了多个值。这是不允许的,因为 子查询后面是=,!=,=或者当子查询用作 表情。声明已终止

我的问题是:

Update T_OP
    Set DOCID = (Select DocID from T_Reg_Patients)
where Fk_RegID = (Select Pk_RegID from T_Reg_Patients)
表1

Pk_RegID    Name    DocID
1           Sam      1
2           Sam2     2
3           Sam3     3
4           Sam4     4
表2

Pk_OPID   Fk_RegID   Name   DOCID
1         1          Sam    NULL
2         2          Sam2   NULL
3         3          Sam3   NULL
4         4          Sam4   NULL
如果Fk_RegId(在表2中)与Pk_RegId(在表1中)相同,我必须从表1中更新DOCID

请帮帮我。谢谢大家!

使用下面的查询

 UPDATE t
 SET t.DOCID=p.DOCID
 FROM T_OP t
   JOIN T_Reg_Patients p ON p.Pk_RegID=t.Fk_RegID

改为使用
JOIN

Update T_OP
    Set docid = rp.DocID
    from t_op o JOIN
         T_Reg_Patients rp
         on o.Fk_RegID = rp.Pk_RegID;

但是,两个表中可能都不需要存储
DocID
。当您需要获取值时,为什么不直接使用
连接呢?

在Mysql中,您可以使用-

UPDATE table
 SET t.DOCID=p.DOCID
 FROM T_OP t
   JOIN T_Reg_Patients p ON p.Pk_RegID=t.Fk_RegID
Update table2 t2 join table1 t1
on t2.Fk_RegID = t1.Pk_RegID
set t2.DOCID = t1.DocID;

您说的是表1和表2,但查询中有T_OP和Reg_Patients。。。坚持用同一个名字!还向我们显示更新后的预期表数据。感谢您的messege join为我工作。。。。
Update table2 t2 join table1 t1
on t2.Fk_RegID = t1.Pk_RegID
set t2.DOCID = t1.DocID;