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

时间:2016-09-21 10:41:23

标签: sql sql-server

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

  

Msg 512,Level 16,State 1,Line 1

     

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   一种表达。声明已经终止。

我的查询是:

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

Table1

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

Table 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 ......

请帮帮我。谢谢!

5 个答案:

答案 0 :(得分:1)

使用以下查询。

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

答案 1 :(得分:1)

改为使用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。为什么不在需要获取值时使用JOIN

答案 2 :(得分:0)

Update t2
 set t2.docid=t1.DocID 
from
T_Reg_Patients t1 join t_op t2 on
t2.Fk_RegID=t1.Pk_RegID 

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在Mysql中,您可以使用-

Update table2 t2 join table1 t1
on t2.Fk_RegID = t1.Pk_RegID
set t2.DOCID = t1.DocID;