首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中应用来自另一个表的数据时创建数据行的多个副本

如何在SQL中应用来自另一个表的数据时创建数据行的多个副本
EN

Stack Overflow用户
提问于 2013-07-27 07:59:30
回答 1查看 108关注 0票数 1

环境: INFORMIX 9.50C1,AIX6.1

与我试图做的最接近的类比是邮件合并。下面是一个场景:

一个表(客户端)有大量的列(72列)。表包含客户端数据,列表示客户端的各种属性。

代码语言:javascript
复制
CLIENT_ID     RPQ_ID    Attrib2     Attrib3 ... Attrib71

表中唯一的键是client id: CLIENT_ID,它是一个12个字符的字母数字字段。所有其他列都允许重复。

客户端表中的一行被设置为新客户端集的模板。

代码语言:javascript
复制
CLIENT_ID     RPQ_ID    Attrib2     Attrib3 ... Attrib71
TEMPLATE_017  000000    London017   CLS12   ... 12

我有第二个表(TMP_IMPORT),它包含一个新的客户ID列表,其中包含一个额外的非唯一属性(RPQ )。导入列表有大约2000行。

代码语言:javascript
复制
CLIENT_ID     RPQ_ID
GPR3344       HG777
JND4111       JL888
JPS3172       JL888
PAP2171       JL888
...

任务是执行相当于邮件合并的操作:使用来自client_id和rpq_id值的TMP_IMPORT和模板行中的所有其他列,将2000年新行添加到客户端表。

表客户端的预期结果是

代码语言:javascript
复制
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脚本、过程和第三方库。

此外,请:没有列的枚举。我看到的常见解决方案之一是连接表并指定每个数据列的源,如

选择TMP_IMPORT.CLIENT_ID,TMP_IMPORT.RPQ_ID,CLIENTS.Attrib2,CLIENTS.Attrib3,.,CLIENTS.Attrib71从TMP_IMPORT,客户.

对于一个只有几列的表来说,这是合理的,但我希望有人有一个更优雅的解决方案。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-07-27 11:31:04

您似乎知道您想要的查询:

代码语言:javascript
复制
insert into clients(client_id, rpt_id, . . . , Attrib71)
    select ti.CLIENT_ID, ti.RPQ_ID, c.Attrib2, c.Attrib3, ..., CLIENTS.Attrib71
    from TMP_IMPORT ti cross join
         (select c.*
          from CLIENTS c
          where client_id = 'Template_017'
         ) c;

你的问题似乎是得到列名的列表。获取列的最简单方法如下:

代码语言:javascript
复制
select colname
from syscolumns c join
     systables t
     on c.tabid = t.tabid and t.tabname = 'CLIENTS'
order by colno;

事实上,你可以:

代码语言:javascript
复制
select colname || ', '

然后将结果复制到insert列列表的查询编辑器中(并删除最后的逗号)。然后将它们复制到select列表中的适当位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17895631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档