我有一个SQL表,想用一个全新的数据列更新其中一列。我有一个(ID,值)对的列表,如下所示:
(2336, 21),
(2337, 13),
(2338, 17),
(2339, 20),
(2340, 21),
(2341, 4),
.
.
.
我该如何编写一条SQL语句,使用这些语句查找表中的每个id并将其替换为新值?
例如,它将找到ID为2336
的行,并将其值替换为21(值是另一列的名称)。
我已经研究过replace,但是看起来并不能解决问题。
答案 0 :(得分:0)
您可以为新值创建临时表,并将UPDATE与JOIN一起使用到该临时表。请尝试以下方法:
create table #newValues (Id INT, Value INT)
insert into #newValues (Id, Value) VALUES (1, 21)
insert into #newValues (Id, Value) VALUES (2, 22)
create table #originalTable (Id INT, Value INT)
insert into #originalTable (Id, Value) VALUES (1, 31)
insert into #originalTable (Id, Value) VALUES (2, 32)
insert into #originalTable (Id, Value) VALUES (3, 33)
UPDATE #originalTable
SET
#originalTable.Value = #newValues.Value
FROM #originalTable
JOIN #newValues ON #newValues.Id = #originalTable.Id
答案 1 :(得分:0)
每个数据库似乎都有自己的格式来更新另一个表中的值。如果我们假设新数据已经在表中,那么它将在大多数(如果不是全部)数据库中起作用:
update original
set value = (select n.value from newdata n where n.id = original.id)
where exists (select 1 from newdata n where n.id = original.id);
答案 2 :(得分:0)
我不确定我是否完全理解,但是......
如果同一表中有两个字段,我将它们定义为旧对和新对。您希望“旧” ID匹配“新”值吗?
我可能要做的是将字段分为ID和值。然后创建一个新表,该表将仅用于引入新值。
类似这样的东西:
SELECT
LEFT(OriginalTable.OldPair,7) AS OriginalID
,RIGHT(OriginalTable.OldPair,3) AS OriginalValue
,LEFT(OriginalTable.OldPair,7) + RIGHT(NewTable.NewPair,3)
FROM OriginalTable
LEFT OUTER JOIN NewTable
ON LEFT(OriginalTable.OldPair,7) = LEFT(NewTable.NewPair,7)