Mysql 如何使用内部联接和分组条件联接10个表
我想将此查询转换为联接,这是我从经理那里得到的任务,请将下面的查询转换为联接格式Mysql 如何使用内部联接和分组条件联接10个表,mysql,Mysql,我想将此查询转换为联接,这是我从经理那里得到的任务,请将下面的查询转换为联接格式 SELECT capder.cder_id, capman.cman_name AS Manufacturer, caprange.cran_name AS Range1,
SELECT
capder.cder_id,
capman.cman_name AS Manufacturer,
caprange.cran_name AS Range1,
capmod.cmod_name AS Model,
capmod.cmod_code AS ModelCode,
capder.cder_doors AS Doors,
nvdbodystyle.bs_description AS BodyStyle,
captrim.ctrim_name AS Trim1,
capder.cder_name as Trim2,
capder.cder_drivetrain AS DriveTrain,
nvdmodelyear.MY_ref AS DerivativeModelYear,
group_concat(distinct(nvddictonaryoption.DO_Description) order by nvddictonaryoption.DO_Description SEPARATOR '|') AS ExteriorColour
FROM capman,
caprange,
capmod,
nvdbodystyle,
capder,
nvdmodelyear,
captrim,
nvdoptions,
nvddictonaryoption,
nvddictionarycategory
WHERE capman.cman_code = caprange.cran_mantextcode
AND caprange.cran_code = capmod.cmod_rancode
AND nvdbodystyle.bc_code = capmod.cmod_bodystyle
AND capmod.cmod_code = capder.cder_modcode
AND capder.cder_id = nvdmodelyear.my_id
AND captrim.ctrim_code = capder.cder_trimcode
AND nvdoptions.OPT_Id = capder.cder_id
AND nvdoptions.opt_optioncode = nvddictonaryoption.DO_OptionCode
AND nvddictionarycategory.dc_catcode = nvddictonaryoption.do_catcode
AND nvddictionarycategory.dc_cth_type = 'C'
AND SUBSTR(nvdmodelyear.MY_ref,1,4) > 2006
group by cder_id,SUBSTR(nvdmodelyear.MY_ref,1,4),captrim.ctrim_name
MySQL工作台6.3 CE。
我试过这样做
SELECT
cd.cder_id,
cm.cman_name AS Manufacturer,
cr.cran_name AS Range1,
cmd.cmod_name AS Model,
cmd.cmod_code AS ModelCode,
cd.cder_doors AS Doors,
nb.bs_description AS BodyStyle,
ct.ctrim_name AS Trim1,
cd.cder_name as Trim2,
cd.cder_drivetrain AS DriveTrain,
nmy.MY_ref AS DerivativeModelYear,
group_concat(distinct(ndo.DO_Description) order by ndo.DO_Description SEPARATOR '|') AS ExteriorColour
FROM capman cm
inner join caprange cr on cm.cman_code = cr.cran_mantextcode
inner join capmod cmd on cr.cran_code = cmd.cmod_rancode
inner join nvdbodystyle nb on nb.bc_code = cmd.cmod_bodystyle
inner join capder cd on cmd.cmod_code = cd.cder_modcode
inner join nvdmodelyear nmy on cd.cder_id = nmy.my_id
inner join captrim ct on ct.ctrim_code = cd.cder_trimcode
inner join nvdoptions nop on nop.OPT_Id = cd.cder_id
inner join nvddictonaryoption ndo on nop.opt_optioncode = ndo.DO_OptionCode
inner join nvddictionarycategory ndc on ndc.dc_catcode = ndo.do_catcode AND ndc.dc_cth_type = 'C' AND SUBSTR(nmy.MY_ref,1,4) > 2006
group by cder_id,SUBSTR(nmy.MY_ref,1,4),ct.ctrim_name;
我做得对吗?它给出了正确的结果,但执行和获得结果的时间太长。是否有更好的方法仅使用联接语法执行此查询,并且我没有权限将索引放入表首先,请注意,您当前的查询无效,因为您仅按三列进行分组,然后选择了十几列。查询甚至不会在大多数其他数据库上运行。除此之外,如果希望加快查询速度,则需要研究索引表。这是一个伟大的梦想reading@Cid还有其他更好的方法吗?您是否尝试过在查询中应用解释?通过这种方式,您可以观察SQL的执行情况。首先,请注意,您当前的查询是无效的,因为您仅按三列进行分组,但随后选择了十几列。查询甚至不会在大多数其他数据库上运行。除此之外,如果希望加快查询速度,则需要研究索引表。这是一个伟大的梦想reading@Cid还有其他更好的方法吗?您是否尝试过在查询中应用解释?这样,您就可以观察SQL的执行情况。