SQL 更新表中的所有条目,但在列上插入不同的值

Posted

技术标签:

【中文标题】SQL 更新表中的所有条目,但在列上插入不同的值【英文标题】:SQL Update all entries from a table but insert different values on thecolumn 【发布时间】:2018-04-26 06:55:40 【问题描述】:

我有一个表格,我想在同一列中为所有条目插入不同的值。 该列尚未插入任何值,我想在其中为每个条目插入不同的字符串。 是否可以?如果是的话,你能帮我写一些代码吗? 我知道如何更新列上具有相同值的所有条目:

UPDATE table_name SET column_name = 'your_string';

【问题讨论】:

SQL Update with row_number()的可能重复 双引号用于分隔标识符,例如具有奇怪名称的列,例如 "First Name"。对字符串文字使用单引号,例如 'you_string'. 添加一些示例表数据和预期结果 - 作为格式化文本,而不是图像。并标记您正在使用的 dbms。 @RaunakThomas 它不是重复的,因为解决方案是迭代并将整数放入列中。我想用字符串设置列的值 每一行的值如何确定?它是基于其他列中的一些现有数据吗?如果是这样,一些示例将非常有帮助。如果不是,这些值是如何定义的? 【参考方案1】:

您可以使用不同的值填充列,并使用它来填充目标列。

考虑以下使用 mysql 数据库的示例。

表创建:

CREATE TABLE a (
column1 varchar(20),
column2 varchar(20),
column3 varchar(50)
);

表格数量:

insert into a(column1, column2) values('a','100');
insert into a(column1, column2) values('b','200');
insert into a(column1, column2) values('c','300');

检查表:

select * from a;
+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
| a       | 100     | NULL    |
| b       | 200     | NULL    |
| c       | 300     | NULL    |
+---------+---------+---------+

使用 column2 填充 column3:

update a set column3=concat('value-',column2);

再次检查表格:

select * from a;
+---------+---------+-----------+
| column1 | column2 | column3   |
+---------+---------+-----------+
| a       | 100     | value-100 |
| b       | 200     | value-200 |
| c       | 300     | value-300 |
+---------+---------+-----------+

(可选)如果不需要,删除 column2:

alter table a drop column column2;

select * from a;
+---------+-----------+
| column1 | column3   |
+---------+-----------+
| a       | value-100 |
| b       | value-200 |
| c       | value-300 |
+---------+-----------+

【讨论】:

感谢您的回答,但对我的问题没有帮助。 我想从外部来源插入值。我将在那里创建字符串,我只需要查询来填充列 您打算如何确定目标表中的哪一行与外部源匹配? 我知道表中的确切行数。我将创建该数字字符串,并希望在应用查询时将这些值放入该列 您能分享一下您的目标表的结构,以及包含要插入到目标表中的生成字符串的表吗?【参考方案2】:

SQL Server 支持可更新的 CTE 和子查询。事实证明这很容易:

with toupdate as (
      select t.*, row_number() over (order by (select null)) as seqnum
      from t
     )
update toupdate
    set col = cast(seqnum as varchar(255));

插入的值是一个转换成字符串的数字。

一个更简单的替代方法是使用newid()

update t
    set col = newid();

您可以为字符串列分配 id。

【讨论】:

以上是关于SQL 更新表中的所有条目,但在列上插入不同的值的主要内容,如果未能解决你的问题,请参考以下文章

SQL:根据另一列的值在列上保留一个具有最大值的行

利用SQL语句插入更新删除数据表中的数据

更新同一表中的值的 PL/SQL 插入和删除触发器

在列上创建自定义组并计算 sql 中的另一列

根据另一个表中的值插入和/或更新记录

SQL在列上加入LIKE另一列[重复]