具有多个表的SQL查询从一个表中获取数据并在另一个表中填充

时间:2018-01-05 07:09:27

标签: mysql sql sql-server

我有两张表AB。表A的列为PersonIDMobileNumberPersonName,其中PersonIDMobileNumber是唯一列。表B的列为ReportIDPersonIDDetailsReportID为唯一列。

每个人都可以使用不同的ReportID添加任意数量的报告。现在我的表B有很多报告,我想在其中添加MobileNumber列。但表B有一个人的许多条目。我可以使用什么查询来获取表A中的MobileNumber并将其填充到表B中,每个PersonID?该查询应从表A中获取MobileNumber,然后将其添加到PersonID列的表B中。

示例

表A

PersonID   |   MobileNumber   |   PersonName
   P1           9999999999           John
   P2           8888888888           Mack
   P3           7777777777           Jack
   P4           6666666666           Mike

表B

ReportID   |   PersonID   |   Details   |   MobileNumber
   R1             P1           .....
   R2             P2           .....
   R3             P2           .....
   R4             P3           .....
   R5             P3           .....
   R6             P3           .....
   R7             P4           .....
   R8             P4           .....

我可以使用什么查询来填充手机号码并获得如下结果?

预期结果

ReportID   |   PersonID   |   Details   |   MobileNumber
   R1             P1           .....         9999999999
   R2             P2           .....         8888888888
   R3             P2           .....         8888888888
   R4             P3           .....         7777777777
   R5             P3           .....         7777777777
   R6             P3           .....         7777777777
   R7             P4           .....         6666666666
   R8             P4           .....         6666666666

PS:
我不想将值选为新表。我想使用UPDATE

填充原始表本身的值

3 个答案:

答案 0 :(得分:2)

您可以使用以下查询来实现此目的:

UPDATE B
INNER JOIN A ON A.PersonID = B.PersonID
SET B.MobileNumber = A.MobileNumber

答案 1 :(得分:0)

您应该使用JOIN语句来实现此目的。更具体地说,LEFT OUTER JOIN如下所示

SELECT B.*, A.MobileNumber
FROM TableB B LEFT OUTER JOIN
TableA A on B.PersonID=A.PersonID
  

我不想将值选为新表。我想使用UPDATE填充原始表本身的值   基于此,您可以使用以下语句

ALTER TABLE TableB
  ADD MobileNumber VARCHAR(50)
GO

如果TableB中不存在该列,则需要在ALTER语句之上触发

UPDATE B
SET
B.MobileNumber= A.MobileNumber
FROM TableB B LEFT OUTER JOIN
TableA A on B.PersonID=A.PersonID

答案 2 :(得分:0)

更新DhruvJoshi'sMittal's回答我能够使用下面适用于我案例的查询。

UPDATE TableB
SET MobileNumber = A.MobileNumber
FROM TableB AS B
INNER JOIN
TableA AS A ON B.PersonID = A.PersonID
INNER JOIN
TableB ON A.PersonID = TableB.PersonID