如果TableC中存在某些值,则将TableA中的列值设置为TableB中的相应值

时间:2015-09-28 11:20:31

标签: sql sql-server

我有一个TableA,我刚刚添加了两列,StartDate和StopDate。它还包含UserName列。

我想用TableB中的值填充它,它也有StartDate和StopDate。 TableB有另一个名为UserId的列。

TableC有两列,Id和Name。

这就是我想做的事情,用某种伪代码解释:

for each row in TableB, where TableB.UserId exists in TableC.Id, take the corresponding row in TableA where TableA.UserName = TableC.Name and set the TableA.StartDate = TableB.StartDate & TableA.StopDate = TableB.StopDate.

我尝试创建一个可以执行此操作的连接语句,但结果有点令人尴尬。 非常感谢帮助。

编辑:我尝试了什么:

UPDATE TableA 
SET STARTDATE = (
   SELECT TableB.StartDate
   FROM TableB
   WHERE TableB.UserId = (??? what should I write here)?

然后同样用于StopDate

2 个答案:

答案 0 :(得分:1)

您可以使用" update-from"来实现此目的。句法。 *我看到您已经解决了您的问题,但我会将此作为替代方案发布。

declare @TableA table (id int identity(1, 1), startDate datetime, stopDate datetime, userName varchar(20))
declare @TableB table (id int identity(1, 1), startDate datetime, stopDate datetime, userId int)
declare @TableC table (userId int, userName varchar(20))

insert into @TableA (userName)
select 'A' union all select 'B'

insert into @TableB (userId, startDate, stopDate)
select 1, '2015-01-01', '2015-01-31' union all select 2, '2015-12-01', '2015-12-31'

insert into @TableC
select 1, 'A' union all select 2, 'B'

update
    A
set
    A.startDate = B.startDate,
    A.stopDate = B.stopDate
from
    @TableA A
    inner join @TableC C on C.userName = A.userName
    inner join @TableB B on B.userId = C.userId

select
    *
from
    @TableA

答案 1 :(得分:0)

我解决了,这是我的解决方案

UPDATE TableA
SET StartDate = up.StartDate, EndDate = up.EndDate
FROM TableB up WHERE up.UserID = (SELECT Id from TableC u where u.Name = TableA.UserName)