2017-04-03 9 views
-1

内容が3つのテーブルがありますが、これを取得して新しいテーブルに追加したいのですが、このSQLエラーが発生しています。行1 "3つの異なるテーブルからデータを取得して新しいテーブルに挿入

ここでは、SQLクエリです。以下

insert into compare_year(yeara,yearb,yearc,data) 
SELECT yeara 
FROM table_1 
UNION ALL 
SELECT yearb, data 
FROM table_2 
UNION ALL 
SELECT yearc 
FROM table_3 

私は

create table table_1(id int primary key auto_increment,yeara varchar(100)); 
create table table_2(id int primary key auto_increment,yearb varchar(100),data varchar(100)); 

create table table_3(id int primary key auto_increment,yearc varchar(100)); 

テーブルを作成する方法である私の新しいテーブルには、誰かが私を助けることができますしてください今

create table compare_year(id int primary key auto_increment,yeara varchar(100),yearb varchar(100),yearc varchar(100),data varchar(100)) 

です。ありがとう

+0

'year *'テーブルのレコード数はまったく同じですか? –

+0

3つのテーブルの3つのカラムから1つのcompare_yearテーブルの行に移動するデータの関係はどのようになりますか?ここでの論理は何ですか? – GurV

答えて

0

注:選択クエリを結合するとき、列の数は等しくなければなりません。 また、複数の選択列を別の列に挿入することはできません。

私のソリューションは次のようになります:3つの表は、同じIDが含まれている場合、あなたはこの

のように行うことができます

、compare_yearにT2を(yeara、yearb、yearc、データ) SELECT T1.yearaを挿入.yearb、のtable_1のT1 FROM T3.yearc、T2.data はT2.Id = T1.Id にtable_2のT2に参加左それはあなたが望むもののように見えるT3.Id = T2.Id

0

にtable_3のT3に参加左UNIONではなくJOINです。 2つのselectステートメントを結合するときは、同じ数のフィールドがSELECTになければなりません。例えば、

insert into compare_year(yeara) 
SELECT yeara 
FROM table_1 
UNION ALL 
SELECT yearb AS yeara 
FROM table_2 
UNION ALL 
SELECT yearc AS yeara 
FROM table_3 

は構文上許容されます。

INSERT INTO compare_year(yeara, yearb, yearc, data) 
SELECT table_1.yeara, table_2.yearb, table_3.yearc, table_2.data 
FROM table_1, table_2, table_3 

ただし、これはテーブルの完全なデカルト積であることに注意してください。 WHERE句の中にいくつかの条件文が必要になる可能性があります。選択理由の順序は、フィールド名ではなくINSERTにとって重要なものであることにも注意してください。

関連する問題