2017-02-12 10 views
0

4つの結合を使用して単一のテーブルに結合しようとしているテーブルがいくつかあります。複数のテーブルを結合し、必要な列を1つのMySQLに挿入する

テーブルは、次のとおり

vehicleId 
make 
model 
year 
cylinders 
displacement 
drive 
engid 
eng_dscr 
trany 
mpgHighway 
mpgCity 
fuelCostAnnual 
fuelType 
fuelType1 
vClass 

vehicledrive

車両

driveId 
driveName 

vehiclefueltype

fuelId 
fuelName 

I車両テーブルを正規化し、新しいテーブル、vehiclenormalを有し、ルックなどの他の3つのテーブルを使用しvehiclemodel

modelId 
modelName 

makeId makeName 

vehiclemake反復的な値のためのアップアップ。

これまでのところ、私が持っているすべては、すべてのテーブルを結合する文です:

select vehicle.*, vehicledrive.*, vehiclefueltype.*, vehiclemake.*, vehiclemodel.* 
from vehicle 

join vehicledrive 
on vehicle.drive = vehicledrive.driveName 

join vehiclefueltype 
on vehicle.fueltype = vehiclefueltype.fuelname 

join vehiclemake 
on vehicle.make = vehiclemake.makename 

join vehiclemodel 
on vehicle.model = vehiclemodel.modelname 

order by vehicle.vehicleid 

私の問題は、私は、INSERT文を追加する方法がわからないということです。挿入には... selectを使用することができますが、結合の結果に基づいて挿入する列と行を指定するにはどうすればよいですか?

編集:さて、私は私が挿入したいデータのみを選択する方法を見つけた、と私は次のクエリを試してみました:

insert into vehiclenormal (makeid, modelid, year, cylinders, driveid, mpghighway, mpgcity, fueltypeid) 
(select makeid, modelid, year, cylinders, driveid, mpghighway, mpgcity, fuelid 
from vehicle 
join vehicledrive on vehicledrive.driveName = vehicle.drive 
join vehiclefueltype on vehiclefueltype.fuelName = vehicle.fueltype 
join vehiclemake on vehiclemake.makeName = vehicle.make 
join vehiclemodel on vehiclemodel.modelname = vehicle.model); 

しかしHeidiSQLは、21,000以上のエラーがあったと言っています。なぜ値を挿入しないのですか?

答えて

2

だけINTO構文INSERTを使用します。

insert into vehiclenormal 
    (makeid, modelid, year, driveName, fuelName, makeName, modelName) 
    select d.makeId, e.modelId, a.year, b.driveName, c.fuelName, d.makeName, e.modelName 
    from vehicle a 
     join vehicledrive b on a.drive = b.driveName 
     join vehiclefueltype c on a.fueltype = c.fuelName 
     join vehiclemake d on a.make = d.makeName 
     join vehiclemodel e on a.model = e.modelName; 
+0

私は実際にちょうどへの挿入を試みたが、私は警告が、何も得ませんでした。私は元の投稿を編集しました。 –

+0

この例では、すべての列を車両に含めるわけではありませんでしたが、とにかくその考えを得ることを願っています。 –

+0

a、b、c、d、eの意義は表の名前です。もしそうなら、なぜそれほど明白である必要がありますか? –

関連する問題