【问题标题】:How to do INSERT into a table records extracted from another table如何插入从另一个表中提取的表记录
【发布时间】:2010-09-09 14:30:34
【问题描述】:

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

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

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

如果你想这样做,你会怎么做?

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

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

    如果两个表中的列名相同,您的查询将是这样的:

    INSERT INTO Table2 (LongIntColumn, Junk)
    SELECT LongIntColumn, avg(CurrencyColumn) as CurrencyColumn1
    FROM Table1
    GROUP BY LongIntColumn;
    

    它可以在没有别名的情况下工作:

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

    【讨论】:

      【解决方案2】:

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

      如果没关系,那么您可以尝试以下查询:

      SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1 
      GROUP BY LongIntColumn1);
      

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

      【讨论】:

        【解决方案3】:

        我相信您在这种情况下的问题是“值”关键字。当您只插入一行数据时,您使用“值”关键字。对于插入选择的结果,您不需要它。

        此外,您真的不需要在 select 语句周围加上括号。

        来自msdn

        多记录追加查询:

        INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
        SELECT [source.]field1[, field2[, …]
        FROM tableexpression
        

        单记录追加查询:

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

        【讨论】:

          【解决方案4】:

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

          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
          

          【讨论】:

            【解决方案5】:

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

            1. 打开两个记录集
            2. 从第一个表中提取数据(SELECT blablabla)
            3. 使用第一个记录集中的可用数据更新第二个记录集(通过添加新记录或更新现有记录
            4. 关闭两个记录集

            如果您计划从不同的数据库更新表(即每个记录集可以有自己的连接......),这种方法特别有趣。

            【讨论】:

              【解决方案6】:

              您有两种语法选择:

              选项 1

              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

              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 上的列)。

              【讨论】:

                【解决方案7】:

                删除 VALUES 和括号。

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

                【讨论】:

                  【解决方案8】:

                  没有“VALUES”,没有括号:

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

                  【讨论】:

                  • 实际上如果没有。的列及其类型相同,并且在表中以相同的顺序退出,那么您可以简单地说,INSERT INTO Table2 SELECT * FROM table1;
                  【解决方案9】:

                  从您的 SQL 中删除 VALUES

                  【讨论】:

                    猜你喜欢
                    • 2017-08-01
                    • 2012-01-23
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-08-14
                    • 1970-01-01
                    • 2016-01-17
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多