SQL - 根据条件填充列值
Posted
技术标签:
【中文标题】SQL - 根据条件填充列值【英文标题】:SQL - Fill column value base on condition 【发布时间】:2020-04-04 04:53:05 【问题描述】:我有一个这样的 sql 表
我想用 Alpha 更新 Message 列,如果它的 ID 为 1058,Bravo 为 2045,Charlie 为 3899。
当我们导入平面文件时,ID 和 Message 会一直不同。它并不总是 1058 2045 3899 和 alpha charlie bravo。
谢谢!
【问题讨论】:
所以您将收到 x 行数,并且您想输入 x1 = alpha、x2 = bravo、x3 = charlie、x4 = delta 等?你能告诉我们你以前尝试过什么吗?另外,你能用实际的表格数据替换图像吗?这样我们可以更快地提供帮助。 @deilgemini 。 . .您的表格已经包含该信息,因此似乎不需要update
。
【参考方案1】:
您可以尝试以下更新:
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
(缺失)消息的所有记录,并将用具有相同ID
的记录中的非NULL
值替换该消息。请注意,我们也可以使用更新连接来编写此逻辑,但确切的语法将取决于您未提及的特定数据库。
对于 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;
【讨论】:
@devil 我的第一个答案应该适用于几乎任何数据库。我已经包含了一个专门用于 SQL Server 的版本。【参考方案2】:您至少需要一个条件来更新数据库中的数据。 如果不需要旧数据,您可以全部删除并插入新记录。
如果这不能解决您的问题,可能需要进行一些数据库结构级别的更改。
【讨论】:
【参考方案3】:您需要使用连接进行条件更新。取决于引擎,但示例如下所示
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
【讨论】:
你怎么知道 OP 使用的是哪个 RDBMS?以上是关于SQL - 根据条件填充列值的主要内容,如果未能解决你的问题,请参考以下文章