web-dev-qa-db-ja.com

SQLの2つのテーブルをマージし、1つの新しいテーブルに保存します

同じ列を持つ2つ以上のテーブルがある場合

表1

Structure, Name, Active
1,A,1

表2

Structure, Name, Active
2,B,0

これら2つのテーブルを組み合わせて、新しいテーブルに保存したいと思います。

新しいテーブル

Structure, Name, Active
1,A,1
2,B,0

ここにコードがあります

CREATE TABLE Amide_actives_decoys
(
    Structure NVARCHAR(255),
    Name NVARCHAR(255),
    Active INT
)
GO

INSERT Amide_actives_decoys
FROM (
   SELECT * FROM Amide_decoys 
   UNION
   SELECT * FROM Amide_actives 
)

次のエラーメッセージが表示されます

メッセージ156、レベル15、状態1、行10
キーワード「FROM」付近の構文が正しくありません。

使用する場合も同じこと

SELECT * INTO Amide_actives_decoys
FROM (
   SELECT * FROM Amide_decoys 
   UNION
   SELECT * FROM Amide_actives 
)

この答えに従って

SQLでテーブルを自分自身に結合して結果を保存する

エラーメッセージは

メッセージ102、レベル15、状態1、行5
「;」付近の構文が正しくありません。

誰でも親切にコメントを提供できますか?ありがとう!

8
Chubaka

この構文は、さまざまなデータベースで機能します。

INSERT INTO Amide_actives_decoys(Structure, Name, Active)
   SELECT * FROM Amide_decoys 
   UNION
   SELECT * FROM Amide_actives; 

この形式のINSERTでは、サブクエリの出力はINSERTの入力値のセットになります。

SELECTステートメントのサブクエリの式のデータ型は、INSERTステートメントのターゲットテーブルのデータ型と一致する必要があることに注意してください。

サブクエリによって返されるすべての行は、Amide_actives_decoysテーブルに挿入されます。

制約違反またはデータ型の競合のために1つの行がINSERTに失敗すると、INSERT全体が失敗し、行は挿入されません。

INSERTステートメント内では、有効なサブクエリを使用できます。

8
Multisync

UNION ALLそれ以外の場合、すべてのデータをキャプチャすることはできません。テーブル内のデータ(重複など)に依存します。

INSERT INTO Amide_actives_decoys(Structure, Name, Active)
   SELECT * FROM Amide_decoys 
   UNION ALL
   SELECT * FROM Amide_actives; 
4
Simon1979

一般的な構文は

INSERT INTO table2
SELECT * FROM table1;

このケースではSELECT INTOステートメントを使用できます

with cte as (select 1 col1 ,2 col2
union all
select 2,3) 
select * into #tabletest from cte

select *From #tabletest
1
King_Fisher

両方の答えで、問題は結果としてテーブルのエイリアス名を指定していないことです。INTOステートメントの 'INSERT'も見逃したと思います。

クエリ1:

CREATE TABLE Amide_actives_decoys
(
    Structure NVARCHAR(255),
    Name NVARCHAR(255),
    Active INT
)
GO

INSERT INTO Amide_actives_decoys
SELECT  *
FROM    (
        SELECT * FROM Amide_decoys 
        UNION
        SELECT * FROM Amide_actives 
        ) LU --LU is added.

クエリ1の場合、以下も正しい

INSERT INTO Amide_actives_decoys
SELECT * FROM Amide_decoys 
UNION
SELECT * FROM Amide_actives 

クエリ2:

SELECT  * 
INTO    Amide_actives_decoys
FROM    (
        SELECT * FROM Amide_decoys 
        UNION
        SELECT * FROM Amide_actives 
        ) LU -- LU added
1
Jithin Shaji
create table Amide_actives_decoys
as
select Structure, Name, Active from 
(
SELECT * FROM Amide_decoys 
UNION
SELECT * FROM Amide_actives 
)
;
0
user6704385