我有两个表,比如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.
错误。
你能帮我解决这个问题。
提前致谢! 维迪。
答案 0 :(得分:1)
对于丢失INSERT
和UNION
,访问似乎有点“挑剔”。一种解决方法是为计算字段分配显式别名,使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
个查询。那么你应该没问题并完全设置好调试任何不良数据。