我有一个像这样的sql表
我想用Alpha更新Message列,如果Bravo是ID 1058和2045,而Charlie是3899。
导入平面文件时,ID和消息始终会不同。并非总是1058 2045 3899和alpha charlie bravo。
谢谢!
答案 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