将多个表中的数据插入一个表中

时间:2013-01-13 15:46:56

标签: mysql ms-access ms-access-2003

我尝试使用下面的SQl将表中的数据添加到一个表中:

INSERT INTO myNewTable
SELECT *
FROM 2010-tbl, 2011-tbl, 2013-tbl
WHERE fldName = 'value';

所有表都具有完全相同的结构 - 但每个表中的值都不同。第一个表(myNewTable)没有值,并且将接受其他值插入其中的所有值。那我该怎么做呢?我需要某种JOIN语句吗?

修改

只有一件事 - 我试图在插入之前删除之前的记录 - 但MS Access会抛出此错误:

Characters found after end of SQL statement

这是代码:

DELETE * FROM myNewTable
INSERT INTO myNewTable
SELECT * FROM 2012-tbl WHERE  (((2012-tbl.[field])=[Text]));

由于

3 个答案:

答案 0 :(得分:6)

Union声明中使用SELECT

INSERT INTO myTable 
SELECT * 
FROM 2010-tbl 
WHERE fldName = 'value'
UNION
SELECT * 
FROM 2011-tbl 
WHERE fldName = 'value'
UNION
SELECT * 
FROM 2013-tbl 
WHERE fldName = 'value'

答案 1 :(得分:1)

您正在寻找工会

http://dev.mysql.com/doc/refman/5.0/en/union.html

INSERT INTO myNewTable
(
  SELECT *
  FROM 2010-tbl
  WHERE fldName = 'value';
) UNION (
  SELECT *
  FROM 2011-tbl
  WHERE fldName = 'value';
) UNION (
  SELECT *
  FROM 2013-tbl
  WHERE fldName = 'value';
)

答案 2 :(得分:1)

执行此操作的简单方法是将 UNION ALL SELECT 一起使用。 如果要消除重复行,请使用UNION而不是UNION ALL。

DELETE * FROM   mynewtable;

INSERT INTO mytable 
SELECT * FROM 2010-tbl WHERE fldname = 'value' 
UNION ALL 
SELECT * FROM 2011-tbl WHERE fldname = 'value' 
UNION ALL 
SELECT * FROM 2012-tbl WHERE  fldname = 'value';

如果这些表具有较少的记录数,则此方法可以正常工作,但如果这些表包含大量记录,则会提供 堆内存相关错误 。 为避免这种情况,您可以使用以下模块化代码段来完成工作!

DELETE * FROM mynewtable;

INSERT INTO mytable SELECT * FROM 2010-tbl WHERE fldname = 'value';

INSERT INTO mytable SELECT * FROM 2011-tbl WHERE fldname = 'value';

INSERT INTO mytable SELECT * FROM 2012-tbl WHERE fldname = 'value';

如果你有太多的表,那么使用上面的(第二路)可能会很费时,因为你必须逐个输入每个命令,所以为了方便你可以将这段代码片段放在一个文本文件中,然后使用源码命令一次运行这些命令。例如:

  1. 创建名称为 allCommands 的文件并将这些命令放入 它:     $ cat> allCommands     DELETE * FROM mynewtable;

    INSERT INTO mytable SELECT * FROM 2010-tbl WHERE fldname = 'value';
    
    INSERT INTO mytable SELECT * FROM 2011-tbl WHERE fldname = 'value';
    
    INSERT INTO mytable SELECT * FROM 2012-tbl WHERE fldname = 'value';
    
  2. 从终端/ cmd开始 mysql

    shell> mysql
    
  3. 使用 命令运行此脚本。 不要忘记给出所有命令文件的正确路径。

    mysql> use db_name;
    mysql> source allCommands;