环境:INFORMIX 9.50C1、AIX 6.1
与我正在尝试做的最接近的类比是邮件合并。这是场景:
一个表 (CLIENTS) 有大量列(72 列)。该表包含客户数据,列代表客户的各种属性。
CLIENT_ID RPQ_ID Attrib2 Attrib3 ... Attrib71
表上的唯一键是客户端 ID:CLIENT_ID,它是一个 12 个字符的字母数字字段。所有其他列都允许重复。
CLIENTS 表中的一行被设置为一组新客户端的模板。
CLIENT_ID RPQ_ID Attrib2 Attrib3 ... Attrib71
TEMPLATE_017 000000 London017 CLS12 ... 12
我有第二个表(TMP_IMPORT),其中包含一个新的客户端 ID 列表以及一个额外的非唯一属性(RPQ ID)。导入列表有 ~2000 行。
CLIENT_ID RPQ_ID
GPR3344 HG777
JND4111 JL888
JPS3172 JL888
PAP2171 JL888
...
任务是执行邮件合并的等效操作:使用来自 TMP_IMPORT 的 client_id 和 rpq_id 值以及来自模板行的所有其他列,将 2000 个新行添加到 CLIENTS 表中。
表 CLIENTS 中的预期结果是
CLIENT_ID RPQ_ID Attrib2 Attrib3 ... Attrib71
TEMPLATE_017 000000 London017 CLS12 ... 12
GPR3344 HG777 London017 CLS12 ... 12
JND4111 JL888 London017 CLS12 ... 12
JPS3172 JL888 London017 CLS12 ... 12
PAP2171 JL888 London017 CLS12 ... 12
...
这一切都发生在一个大公司内,就访问控制、执行权限等而言,灵活性很小。解决方案必须使用直接的 SQL,没有 shell 脚本、过程和第三方库。
另外,请:不要枚举列。我见过的常见解决方案之一是连接表并指定每个数据列的来源,如
select TMP_IMPORT.CLIENT_ID, TMP_IMPORT.RPQ_ID, CLIENTS.Attrib2, CLIENTS.Attrib3, ..., CLIENTS.Attrib71 from TMP_IMPORT, CLIENTS ...
这对于只有几列的表来说是合理的,但我希望有人有一个更优雅的解决方案。
谢谢!