57

I want to create a new table in SQL Server with the following query. I am unable to understand why this query doesn't work.

Query1: Works

SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2 

Query2: Does not Work. Error: 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
)

Thanks!

OMG Ponies
  • 325,700
  • 82
  • 523
  • 502
Sekhar
  • 5,614
  • 9
  • 38
  • 44

5 Answers5

121

You have to define a table alias for a derived table in SQL Server:

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

"x" is the table alias in this example.

OMG Ponies
  • 325,700
  • 82
  • 523
  • 502
  • When I try this, it doesn't give me the sum of number of records of TABLE1 and TABLE2, it's always less. Would you happen to know why this happens? Thank you! – Christa Feb 06 '18 at 16:12
  • 5
    @Christa - This is likely due to having the same row in both tables, it will only make one record for the union. If you use `UNION ALL` it will not remove duplicates. – Hashman Feb 16 '18 at 18:10
3

You can also try:

create table new_table as
select * from table1
union
select * from table2
Pablo Santa Cruz
  • 176,835
  • 32
  • 241
  • 292
3
INSERT INTO #Temp1
SELECT val1, val2 
FROM TABLE1
 UNION
SELECT val1, val2
FROM TABLE2
Lorena Pita
  • 1,366
  • 1
  • 17
  • 20
3

Here's one working syntax for SQL Server 2017:

USE [<yourdb-name>]
GO

SELECT * INTO NEWTABLE 
FROM <table1-name>
UNION ALL
SELECT * FROM <table2-name>
2
select *
into new_table
from table_A
UNION
Select * 
From table_B

This only works if Table_A and Table_B have the same schemas

Jim
  • 3,425
  • 9
  • 32
  • 49
  • You can use three (and four if the table is on a Linked Server instance) name format to access other schemas and/or databases. – OMG Ponies Oct 25 '10 at 20:58