2

我试图使用下面的这个 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]));

谢谢

4

3 回答 3

5

Union在你的SELECT陈述中使用 a

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'
于 2013-01-13T15:48:45.307 回答
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';
)
于 2013-01-13T15:49:28.167 回答
1

执行此操作的简单方法是将UNION ALLSELECT一起使用。如果要消除重复行,请使用 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';

如果您有太多表格,那么使用上述(第二种方式)可能会很耗时,因为您必须一个一个地输入每个命令,因此为了方便起见,您可以将此代码段放在一个文本文件中,然后使用 source 命令运行这些命令一次。例子:

  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. 使用source命令运行此脚本。不要忘记提供 allCommands 文件的正确路径。

    mysql> use db_name;
    mysql> source allCommands;
    
于 2017-02-19T13:59:14.417 回答