首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过拆分另一个表中的值来插入到包含多行的表中

通过拆分另一个表中的值来插入到包含多行的表中
EN

Stack Overflow用户
提问于 2014-02-04 18:44:01
回答 2查看 132关注 0票数 1

我有两个表,比如table1和table2。我想通过拆分table1中的逗号分隔值来插入table2。

例如,假设在table1中:

代码语言:javascript
复制
ID          Mac
----        --------------------------------------------------------------------------
9504        11:22:33:44:55:66:77:88, aa:bb:cc:dd:ee:ff:gg:hh, 99:00:11:22:33:44:55:66
9505        ii:jj:kk:ll:mm:nn:oo:pp, 77:88:99:00:11:22:33:44

那么table2应该有:

代码语言:javascript
复制
ID          Mac
----        -----------------------
9504        11:22:33:44:55:66:77:88
9504        aa:bb:cc:dd:ee:ff:gg:hh
9504        99:00:11:22:33:44:55:66
9505        ii:jj:kk:ll:mm:nn:oo:pp
9505        77:88:99:00:11:22:33:44

我编写了以下SQL (我不想编写存储的proc或触发器):

代码语言:javascript
复制
INSERT INTO table2 (ID, Mac)

SELECT ID, Left(Mac,23)
FROM table1
WHERE Left(Mac, 23) <> " "

UNION SELECT ID,mid(Mac, 26, 23)
FROM table1
WHERE mid(Mac, 26, 23) <> " "

UNION SELECT ID,mid(Mac, 51, 23)
FROM table1
WHERE mid(Mac, 51, 23) <> " "

UNION SELECT ID,mid(Mac, 75, 23)
FROM table1
WHERE mid(Mac, 75, 23) <> " "

UNION SELECT ID,mid(Mac, 97, 23)
FROM table1
WHERE mid(Mac, 97, 23) <> " ";

然而,我得到了Syntax Error in FROM clause.错误。

你能帮我把这个修好吗?

提前感谢!瓦迪亚。

EN

回答 2

Stack Overflow用户

发布于 2014-02-04 23:57:16

Access似乎对缺少INSERTUNION有点“挑剔”。一种解决方法是为计算字段分配一个显式别名,使UNION查询成为子查询,并从子查询中执行SELECT,如下所示:

代码语言:javascript
复制
INSERT INTO Table2 (ID, Mac)
SELECT ID, X FROM
(SELECT ID, Left(Mac,23) AS X
FROM table1
WHERE Left(Mac, 23) <> " "

UNION SELECT ID,mid(Mac, 26, 23)
FROM table1
WHERE mid(Mac, 26, 23) <> " "

UNION SELECT ID,mid(Mac, 51, 23)
FROM table1
WHERE mid(Mac, 51, 23) <> " "

UNION SELECT ID,mid(Mac, 75, 23)
FROM table1
WHERE mid(Mac, 75, 23) <> " "

UNION SELECT ID,mid(Mac, 97, 23)
FROM table1
WHERE mid(Mac, 97, 23) <> " ");

请注意,我使用X而不是Mac作为字段别名。当我尝试使用Mac时,Access在计算中看到对Mac的引用是循环的。我想你可以通过在引用前面加上表名来解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2014-02-05 00:26:02

我不确定为什么您要在一个Access查询中完成所有这些操作。考虑为您的SELECT语句创建5个新查询,一个UNION查询UNION这些SELECT语句的结果,以及一个INSERT查询。那么你应该已经做好了调试任何坏数据的准备。

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

https://stackoverflow.com/questions/21550197

复制
相关文章

相似问题

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