Quiere abreviar la consulta

Tengo la consulta, que está dando el resultado correcto, pero estoy seguro de que hay otra forma de hacerlo, repitiendo las mismas condiciones.

¿Alguien puede ayudarme a reducir la complejidad de la consulta?

Consulta usando estos parámetros mysql: -

SELECT avai.account_visit_account_info_pk                             AS Account_ID,
       mb.NAME                                                        AS Client_Name,
       mb.fullname                                                    AS Client_Full_Name,
       avai.account_name                                              AS Account_Name,
       mc.NAME                                                        AS Asset_City,
       Format(( bfd.finance_value ), 'en_IN')                         AS Reserve_Price,
       Format(( bfd.finance_value ) * 10 / 100, 'en_IN')              AS EMD_Value,
       Ifnull(Concat(CASE
                       WHEN mpc.parent = 4 THEN 'Residential'
                       WHEN mpc.parent = 5 THEN 'Commercial'
                       WHEN mpc.parent = 6 THEN 'Industrial'
                       WHEN mpc.parent = 7 THEN 'Agricultural'
                     END, '/', mpc.category_name), mpc.category_name) Asset_Category,
       Concat(ud.first_name, ' ', ud.last_name)                       AS ADM_Name,
       Concat(udd.first_name, ' ', udd.last_name)                     AS MKT_Name,
       mcc.NAME                                                       AS ADM_City,
       ms.NAME                                                        AS ADM_State,
       mz.NAME                                                        AS ADM_Zone,
       bec.e_auction_from                                             AS Auction_Date,
       bfdd.finance_value                                             AS Sold_Price
FROM   account_branch_visit abv
       JOIN mst_product_category mpc
         ON mpc.mst_product_category_pk = abv.mst_product_category_pk
       JOIN mst_bank mb
         ON abv.mst_bank_pk = mb.mst_bank_pk
       JOIN banking_financial_details bfd
         ON abv.account_branch_visit_pk = bfd.account_branch_visit_pk
            AND bfd.mst_financial_pk IN ( 33 )
       LEFT JOIN banking_financial_details bfdd
              ON abv.account_branch_visit_pk = bfdd.account_branch_visit_pk
                 AND bfd.mst_financial_pk IN ( 38 )
       JOIN mst_city mc
         ON mc.mst_city_pk = avai.mst_city_pk
       JOIN mst_city mcc
         ON mcc.mst_city_pk = avai.mst_city_pk
       JOIN mst_state ms
         ON ms.mst_state_pk = mcc.mst_state_pk
       JOIN mst_zone mz
         ON mz.mst_zone_pk = ms.mst_zone_pk
       JOIN case_allocation ca
         ON ca.account_branch_visit_pk = avai.account_branch_visit_pk
            AND ca.mst_activity_pk = 21
       JOIN case_allocation caa
         ON caa.account_branch_visit_pk = avai.account_branch_visit_pk
            AND caa.mst_activity_pk = 18
       JOIN user_detail ud
         ON ud.user_detail_pk = ca.assignedto
       JOIN user_detail udd
         ON udd.user_detail_pk = caa.assignedto
       JOIN banking_event_calender bec
         ON bec.account_branch_visit_pk = avai.account_branch_visit_pk
            AND ( abv.closed_reasons_pk IS NULL
                   OR abv.closed_reasons_pk = 16 )
            AND abv.isdeleted = '0'
WHERE  avai.account_branch_visit_pk = '1301';  
Answer

No sé cuál es la intención exacta de la consulta, por lo que proporcionaré algunos matices técnicos, sin comprender realmente su modelo de datos u objetivo. La selectcláusula le proporciona algunas columnas y probablemente las necesite. Entonces, lo que estoy buscando son combinaciones de tablas duplicadas. Algunos de ellos son necesarios, algunos de ellos son innecesarios.

detalles_financieros_bancarios

joiny left joinesta mesa con ideas diferentes. Usas ambos, así que supongo que esto es necesario.

mst_ciudad

Obviamente, esto es duplicar innecesariamente:

   JOIN mst_city mc
     ON mc.mst_city_pk = avai.mst_city_pk
   JOIN mst_city mcc
     ON mcc.mst_city_pk = avai.mst_city_pk

Elimine la segunda JOINy ONlas cláusulas de arriba y reemplace todos los usos de mccto mcen la consulta.

asignación_caso

Usted joinesta tabla dos veces, pero con diferentes identificaciones y luego se une a la correspondiente user_detaila ambas y ambas user_detailinstancias se están utilizando, por lo que probablemente sea necesario.

usuario_detalle

Dado que este duplicado joinparece usarse en el select, probablemente sea necesario.

Resumen

Hemos encontrado un innecesario joinque se puede eliminar. Es posible acortar aún más la consulta, pero necesitaríamos saber más sobre su tarea y base de datos para determinar mejoras adicionales.