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的执行情况。