SQL-根据条件填充列值

时间:2020-04-04 04:53:05

标签: sql sql-server sql-update

我有一个像这样的sql表

enter image description here

我想用Alpha更新Message列,如果Bravo是ID 1058和2045,而Charlie是3899。

导入平面文件时,ID和消息始终会不同。并非总是1058 2045 3899和alpha charlie bravo。

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以尝试以下更新:

UPDATE yourTable t1
SET Message = (SELECT t2.Message FROM yourTable t2
               WHERE t2.ID = t1.ID AND t2.Message IS NOT NULL)
WHERE
    Message IS NULL;

此更新将针对所有具有NULL(丢失)消息的记录,并将该消息替换为来自具有相同NULL的记录中的非ID值。请注意,我们也可以使用更新联接来编写此逻辑,但是确切的语法取决于您未提及的特定数据库。

对于SQL Server,这是使用更新联接逻辑执行此操作的一种方法:

WITH cte AS (
    SELECT t1.Message AS msgTarget, t2.Message AS msgSource
    FROM yourTable t1
    INNER JOIN yourTable t2 ON t2.ID = t1.ID
    WHERE t1.Message IS NULL AND t2.Message IS NOT NULL
)

UPDATE cte
SET msgTarget = msgSource;

答案 1 :(得分:0)

您至少需要一种条件来更新数据库中的数据。 如果不需要旧数据,则可以删除所有数据并插入新记录。

如果这不能解决您的问题,则可能需要对数据库结构级别进行一些更改。

答案 2 :(得分:-1)

您需要使用联接进行条件更新。取决于引擎,但示例如下所示


UPDATE  A
Set A.Message=B.Message
From Table A
INNER JOIN  
(Select distinct id, message from table) B
ON A.id=B.id
Where A.Message is null

相关问题