SQL上传用(id,value)对替换整个列

时间:2018-08-27 14:44:09

标签: sql

我有一个SQL表,想用一个全新的数据列更新其中一列。我有一个(ID,值)对的列表,如下所示:

(2336, 21),
(2337, 13),
(2338, 17),
(2339, 20),
(2340, 21),
(2341, 4),
.
.
.

我该如何编写一条SQL语句,使用这些语句查找表中的每个id并将其替换为新值?

例如,它将找到ID为2336的行,并将其值替换为21(值是另一列的名称)。

我已经研究过replace,但是看起来并不能解决问题。

3 个答案:

答案 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)