【问题标题】:Want to short the query想缩短查询
【发布时间】:2022-01-15 12:16:07
【问题描述】:

我有查询,它给出了正确的结果,但是,我确信还有其他方法可以做到这一点,重复相同的条件。

谁能帮我降低查询的复杂性。

使用这些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';  

【问题讨论】:

  • 您的查询以WHERE avai.account_branch_visit_pk = '1301' 结尾。表(或别名)avai 介绍在哪里?

标签: mysql join


【解决方案1】:

我不知道查询的确切意图是什么,因此我将提供一些技术上的细微差别,但并未真正了解您的数据模型或目标。 select 子句为您提供了一些列,您可能需要它。所以,我正在寻找的是重复的表连接。有些是必要的,有些是不必要的。

banking_financial_details

你join和left join这个表有不同的想法。您同时使用它们,所以我认为这是必要的。

mst_city

这显然是不必要的重复:

   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 和ON 子句,并将查询中mcc 的所有用法替换为mc。

case_allocation

您 join 这个表两次,但使用不同的 id,然后您将相应的 user_detail 加入到这两个表中,并且两个 user_detail 实例都在使用,所以这可能是必要的。

用户详细信息

由于这个重复的join似乎用在select中,所以可能是必要的。

总结

我们发现了一个可以删除的不必要的join。可以进一步缩短查询,但我们需要更多地了解您的任务和数据库以确定进一步的改进。

【讨论】:

  • 实际上,我必须准备一份报告,其中选择查询中的所有字段都是必需的,由于我对数据库查询不太了解,因此我正在尝试以任何方式实现。
  • 当你遇到一个复杂的问题时,你(大多数时候!)也会得到一个复杂的 SQL 查询。当前查询似乎不是很复杂,但是不知道查询应该实现什么,任何可以使用当前信息完成的优化都在这个答案中完成。
猜你喜欢
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2017-06-08
  • 2021-10-31
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多