【发布时间】:2015-12-15 23:29:54
【问题描述】:
假设我有一个关联数组(用另一种语言定义),如下所示:
apply = {
'qwer': ['tju', 'snf', 'rjtj', 'sadgg']
'asdf': ['rtj', 'sfm', 'rtjt', 'adjdj']
...
'zxcv': ['qwr', 'trj', '3w4u', '3tt3']
}
我有一张这样的桌子:
CREATE TABLE apples (
id integer,
name varchar(10),
key varchar(10),
value varchar(10)
);
如果apples.value 在apply 变量的列表之一中,我想应用更新,然后将apples.key 设置为数组的键。如果apples.value 是tju,则将apples.key 设置为qwer。
我目前的方法是这样的(将 PostgreSQL 与任何程序语言混合):
for key in apply.keys:
UPDATE apples SET key=$key
FROM (SELECT unnest(array($apply[key])) AS value) AS update_table
WHERE value=update_table.value
我想在一个语句中做到这一点。
【问题讨论】:
-
我不相信有一种方法可以在文字单一的声明中做到这一点。在你的代码中肯定有一个函数(存储过程)或一个智能数据库库,但作为直接的 SQL,我持怀疑态度。不过,我赞成这个问题,因为它很有趣,而且我想被证明是错误的。
-
@user3137702:总有办法的。 Postgres 有大量的字符串函数。不过,通常情况下,转换为源语言中兼容的数据类型会更聪明/更不容易出错。我添加了一个概念证明。
标签: sql arrays postgresql sql-update string-parsing