我想将table_1
n等于今天的日期将table_2
的数据更新为table_2.date_modificatio
中存在的数据
例如:
Table_1
------------------------------
id | Name | phoneNumber
------------------------------
1 George +16742348743
2 David +16472379438
Table_2
----------------------------------------------------------
id | Name | phoneNumber| Date_modification
-----------------------------------------------------------
1 George +19999999999 4/24/2019
2 David +11111111111 4/24/2019
假设我还有更多需要更新的数据。如何找到一种方法来仅使用一个更新查询来更新每个行具有不同数据的上一行?
答案 0 :(得分:2)
我将使用此更新联接:
UPDATE t1
SET
Name = t2.Name,
phoneNumber = t2.phoneNumber
FROM Table_1 t1
INNER JOIN Table_2 t2
ON t1.id = t2.id
WHERE
t2.Date_modification = CONVERT(date, GETDATE());
如果两个表(和)中都存在匹配的Table_2
,则此处的逻辑是将名称和电话号码从Table_1
移至id
Table_2
中的修改日期应该是今天。
答案 1 :(得分:0)
update语句如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
您要指定表名,然后指定要设置为其值的列,然后指定条件。这将更新满足条件的记录。如果一个以上记录满足了该条件,那么更新将更新多个记录。
答案 2 :(得分:0)
我猜您想更新phoneNumber
,并且表通过Name
联接:
update t1
set t1.phoneNumber = t2.phoneNumber
from Table_1 t1 inner join Table_2 t2
on t2.Name = t1.Name
where t2.Date_modification = convert(date, getdate())
答案 3 :(得分:0)
UPDATE Table_2 t2
SET Name = t1.Name,PhoneNumber=t1.PhoneNumber,Date_modification=getdate()
FROM Table_1 t1
WHERE t1.id = t2.id;
请在测试数据库中尝试
答案 4 :(得分:0)
我将使用MERGE
语句。这应该适用于您的示例:
MERGE table_1 AS target
USING table_2 AS source
ON (target.id = source.id and source.Date_modification = CONVERT(varchar(30), GETDATE(), 111))
WHEN MATCHED THEN
UPDATE SET
target.Name = source.Name
,target.phoneNumber = source.phoneNumber;
它的作用是:
table_1
设置为目标表,并将table_2
设置为源表id
是否匹配并且Date_modification
是否今天Name
)中的phoneNumber
和table_1
列更新为源(table_2
)中的内容我已经在您提供的测试数据上进行过尝试,但是为了安全起见,我建议您先在测试环境或begin/rollback transaction
封装中运行它。
有关MERGE
语句的更多信息,可以在这里找到:https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017