【问题标题】:Inserting into a table with multiple rows by splitting values from another table通过从另一个表中拆分值插入到具有多行的表中
【发布时间】:2014-02-05 00:26:01
【问题描述】:

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

例如,假设在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. 错误。

你能帮我解决这个问题吗?

提前致谢! 维迪亚。

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 感谢您的快速回复!MS Access

标签: sql ms-access


【解决方案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 的引用视为循环。我想你可以通过在引用前加上表名来解决这个问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-04
      • 2018-04-12
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多