2017-02-12 124 views
0

我想要使用4个连接将一些表加入到一个表中。如何:加入多个表并将所需列插入到一个MySQL中

的表是:

车辆

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

vehicledrive

driveId 
driveName 

vehiclefueltype

fuelId 
fuelName 

vehiclemake

makeId 
makeName 

vehiclemodel

modelId 
modelName 

我有一个新的表,vehiclenormal,其归一化车辆表,并且使用其他3代表作为look-重复价值。

到目前为止,我已经是联接中的所有表的语句:

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 into ... 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

只需使用INSERT INTO语法:

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的意义是表名,对吗?如果是这样,为什么需要这么明确? –