【问题标题】:SELECT INTO USING UNION QUERY选择使用联合查询
【发布时间】:2023-03-28 00:00:01
【问题描述】:

我想使用以下查询在 SQL Server 中创建一个新表。我无法理解为什么这个查询不起作用。

查询1:有效

SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2 

查询 2:不起作用。 错误:Msg 170, Level 15, State 1, Line 7 Line 7: Incorrect syntax near ')'.

SELECT * INTO [NEW_TABLE]
FROM
(
SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2
)

谢谢!

【问题讨论】:

    标签: sql sql-server tsql union derived-table


    【解决方案1】:

    您必须在 SQL Server 中为派生表定义表别名:

    SELECT x.* 
      INTO [NEW_TABLE]
      FROM (SELECT * FROM TABLE1
            UNION
            SELECT * FROM TABLE2) x
    

    “x”是本例中的表别名。

    【讨论】:

    • 当我尝试这个时,它并没有给我 TABLE1 和 TABLE2 的记录数的总和,它总是更少。你会碰巧知道为什么会这样吗?谢谢!
    • @Christa - 这可能是由于两个表中有相同的行,它只会为联合创建一条记录。如果您使用UNION ALL,它不会删除重复项。
    【解决方案2】:

    你也可以试试:

    create table new_table as
    select * from table1
    union
    select * from table2
    

    【讨论】:

      【解决方案3】:
      INSERT INTO #Temp1
      SELECT val1, val2 
      FROM TABLE1
       UNION
      SELECT val1, val2
      FROM TABLE2
      

      【讨论】:

        【解决方案4】:

        这是 SQL Server 2017 的一种有效语法:

        USE [<yourdb-name>]
        GO
        
        SELECT * INTO NEWTABLE 
        FROM <table1-name>
        UNION ALL
        SELECT * FROM <table2-name>
        

        【讨论】:

          【解决方案5】:
          select *
          into new_table
          from table_A
          UNION
          Select * 
          From table_B
          

          这仅适用于 Table_A 和 Table_B 具有相同架构的情况

          【讨论】:

          • 您可以使用三个(如果表位于链接服务器实例上,则使用四个)名称格式来访问其他架构和/或数据库。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-25
          • 2013-08-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多