通过拆分另一个表中的值来插入具有多行的表

时间:2014-02-04 10:44:01

标签: sql ms-access

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

例如,假设在table1中:

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应该有:

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(我不想编写存储过程或触发器):

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.错误。

你能帮我解决这个问题。

提前致谢! 维迪。

2 个答案:

答案 0 :(得分:1)

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

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 :(得分:1)

我不确定您为什么要在一个Access查询中执行所有这些操作。考虑为您的SELECT语句创建5个新查询,UNION查询UNION SELECT个语句的结果和INSERT个查询。那么你应该没问题并完全设置好调试任何不良数据。