【发布时间】:2014-07-11 13:11:29
【问题描述】:
我的数据库中目前有三个表:
tablename: r 有 800k 条记录
r_key text, name varchar, l_key varchar[]
a1, high street, [r1,r2,r3]
a2, a123, [r1,r2,r3]
a3, orchard street, r4
a4, thomas lane, [r5,r6]
表名:l 有 400 万条记录
l_key text,
r1
r2
r3
r4
r5
r6
然后我有一个看起来像这样的查找表,其中包含 3.6mill 记录
r_key text, l_key text
a1, r1
a1, r2
a1, r3
a2, r1
a2, r2
a2, r3
a3, r4
a4, r5
a4, r6
我追求的是一个看起来像的新表
l_key, name, number*
r1, high street, a123
r2, high street, a123
r3, high street, a123
r4, orchard street, NULL
r5, thomas lane, NULL
r6, thomas lane, NULL
*数字将来自对名称字段执行正则表达式以查找包含数字的任何值
我尝试过使用更新语句:
UPDATE l SET
name = (SELECT name
FROM lookup
INNER JOIN r
ON lookup.r_key = r.r_key
INNER JOIN l
ON lookup.l_key = l_l_key);
但是选择返回多条记录,所以我得到了这个错误
ERROR: more than one row returned by a subquery used as an expression
然后我尝试使用两个光标编写一个函数来查看不同的键并应用更新,但这已经运行了几个小时,我认为它不会起作用。
我做了一些研究,有一个支点,但不确定它是否适用于这种情况。
附加:Windows 7 PostgreSQL 9.3
【问题讨论】:
标签: sql regex postgresql