关于sql:如何对插入到另一个表中的记录进行插入

关于sql:如何对插入到另一个表中的记录进行插入

How to do INSERT into a table records extracted from another table

我正在尝试编写一个查询,该查询从一个表中提取和转换数据,然后将这些数据插入另一个表中。 是的,这是一个数据仓库查询,我正在MS Access中进行。 所以基本上我想要这样的查询:

1
2
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
  (SELECT LongIntColumn1, Avg(CurrencyColumn) AS CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);

我尝试过,但收到语法错误消息。

如果要这样做,该怎么办?


没有" VALUES",没有括号:

1
2
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) AS CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;

您有两个语法选项:

选项1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE Table1 (
    id INT IDENTITY(1, 1) NOT NULL,
    LongIntColumn1 INT,
    CurrencyColumn money
)

CREATE TABLE Table2 (
    id INT IDENTITY(1, 1) NOT NULL,
    LongIntColumn2 INT,
    CurrencyColumn2 money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)

INSERT INTO Table2
SELECT LongIntColumn1, Avg(CurrencyColumn) AS CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1

选项2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE Table1 (
    id INT IDENTITY(1, 1) NOT NULL,
    LongIntColumn1 INT,
    CurrencyColumn money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)


SELECT LongIntColumn1, Avg(CurrencyColumn) AS CurrencyColumn1
INTO Table2
FROM Table1
GROUP BY LongIntColumn1

请记住,选项2将创建一个表,该表的投影上仅包含列(SELECT上的列)。


删除VALUES和括号。

1
2
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1

我相信您在这种情况下遇到的问题是"值"关键字。仅插入一行数据时,可以使用" values"关键字。要插入选择的结果,则不需要它。

另外,您实际上不需要选择语句周围的括号。

来自msdn:

多记录追加查询:

1
2
3
INSERT INTO target [(field1[, field2[,]])] [IN externaldatabase]
SELECT [SOURCE.]field1[, field2[,]
FROM tableexpression

单记录追加查询:

1
2
INSERT INTO target [(field1[, field2[,]])]    
VALUES (value1[, value2[,])

从SQL中删除VALUES


追加一组行时,请删除"值",并删除多余的括号。您可以通过为avg(CurrencyColumn)使用别名(如您在示例中所做的那样)或完全不使用别名来避免循环引用。

如果两个表中的列名相同,则查询将如下所示:

1
2
3
4
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn) AS CurrencyColumn1
FROM Table1
GROUP BY LongIntColumn;

它无需别名即可工作:

1
2
3
4
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn)
FROM Table1
GROUP BY LongIntColumn;


将一个表中的数据插入到不同数据库中的另一个表中

1
2
3
INSERT INTO DocTypeGroup
    SELECT DocGrp_Id,DocGrp_SubId,DocGrp_GroupName,DocGrp_PM,DocGrp_DocType
    FROM Opendatasource( 'SQLOLEDB','Data Source=10.132.20.19;UserID=sa;Password=gchaturthi').dbIPFMCI.dbo.DocTypeGroup

我认为最好的方法是(将是?)定义2个记录集,并将它们用作2个表之间的中间。

  • 打开两个记录集
  • 从第一个表中提取数据(SELECT blablabla)
  • 使用第一个记录集中的可用数据更新第二个记录集(通过添加新记录或更新现有记录)
  • 关闭两个记录集
  • 如果您计划更新来自不同数据库的表(即每个记录集可以具有自己的连接...),则此方法特别有趣。


    您要在现有表中插入提取吗?

    如果没关系,则可以尝试以下查询:

    1
    2
    SELECT LongIntColumn1, Avg(CurrencyColumn) AS CurrencyColumn1 INTO T1 FROM Table1
    GROUP BY LongIntColumn1);

    它将使用提取的信息创建一个新表-> T1


    推荐阅读

      linux查询ip命令?

      linux查询ip命令?,地址,网络,信息,设备,系统,电脑,终端,命令,中心,技术指标,l

      linux查询所有命令?

      linux查询所有命令?,工作,地址,系统,命令,信息,目录,工具,基础,文件,内容,lin

      linux日志命令查询?

      linux日志命令查询?,系统,名称,信息,实时,电脑,对比,最新,日志,命令,环境,Lin

      linux文本查询命令?

      linux文本查询命令?,标准,命令,文件,工具,数据,信息,位置,系统,内容,文本,Lin

      命令查询linux包安装?

      命令查询linux包安装?,软件,地方,地址,名字,系统,名称,信息,路径,命令,文件,

      linux命令与数据流?

      linux命令与数据流?,工作,地址,系统,信息,命令,目录,标准,网络,管理,常用命

      查询linux的命令历史?

      查询linux的命令历史?,信息,系统,名称,地址,服务,命令,数据,环境,指令,用户,

      linux线程查询命令?

      linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Lin

      linux恢复数据库命令?

      linux恢复数据库命令?,工具,系统,软件,数据,盘中,密码,命令,备份,数据库,文

      linux命令左右查询?

      linux命令左右查询?,系统,信息,管理,地址,工作,命令,文件,单位,位置,数据,lin

      linux储存命令数据?

      linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

      linux简单查询命令?

      linux简单查询命令?,地址,命令,信息,设备,电脑,系统,工作,文件,终端,内容,Lin

      linux储存命令数据?

      linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

      linux线程查询命令?

      linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Lin

      linux命令左右查询?

      linux命令左右查询?,系统,信息,管理,地址,工作,命令,文件,单位,位置,数据,lin

      linux简单查询命令?

      linux简单查询命令?,地址,命令,信息,设备,电脑,系统,工作,文件,终端,内容,Lin

      查询linux配置的命令?

      查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,

      查询linux配置的命令?

      查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,

      linux命令大全数据库?

      linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

      linux上数据库的命令?

      linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,