我有两个表,比如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 (我不想编写存储的proc或触发器):
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.错误。
你能帮我把这个修好吗?
提前感谢!瓦迪亚。
发布于 2014-02-04 23:57:16
Access似乎对缺少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的引用是循环的。我想你可以通过在引用前面加上表名来解决这个问题。
发布于 2014-02-05 00:26:02
我不确定为什么您要在一个Access查询中完成所有这些操作。考虑为您的SELECT语句创建5个新查询,一个UNION查询UNION这些SELECT语句的结果,以及一个INSERT查询。那么你应该已经做好了调试任何坏数据的准备。
https://stackoverflow.com/questions/21550197
复制相似问题