这可能听起来很基本,而且经常被问到,但令我惊讶的是,这个问题经常只得到部分回答.
假设我有一个PostgreSQL数据库,它有一个名为"TABLE"的表,其中有一列名为"COMPALUATION"的列.此列当前填充为NULL.
我有所有的值来填充数据库之外的计算.假设这些值在一个用逗号分隔的字符串中.现在,我要构造一条SQL语句,该语句按照"计算"的所有值在这样的字符串中出现的顺序更改它们.
类似的问题在这里也被问过,互联网上有无数关于如何为数据库增值的教程,但它们总是建议:
UPDATE calculation FROM table SET calculation=value WHERE ...
该命令的问题在于:(1)它需要一个不存在的WHERE条件(我们希望更新所有值,而不仅仅是符合特定条件的值).(2)假设只有一个值可供计算.因此,似乎建议我们必须为每一行调用一个查询.
问这个问题的人经常会被吸引到:
INSERT INTO table (calculation) VALUES ...
这完全符合语法,但不起作用,因为列已经存在,行已经创建.
这是一个在SQL之外的简单操作.和其他语言通常能够将向量作为列追加到它们的表等价项中.或者,更好的做法是将列的内容替换为向量.我遗漏了什么?
编辑:一个更具体的例子:
假定数据库数据库中已存在名为"TABLE"的下列表
PKID | name | calculation |
---|---|---|
1 | alfa | NULL |
2 | beta | NULL |
3 | theta | NULL |
我希望在计算字段中分别填充值"akdak"、"dndja"和"jsnajsna".以使:
PKID | name | calculation |
---|---|---|
1 | alfa | akdak |
2 | beta | dndja |
3 | theta | jsnajsna |
在不引用WHERE子句中的PKID和NAME值的情况下,如何在单个SQL查询中执行此操作?