想要缩短查询

  • 本文关键字:查询 mysql join
  • 更新时间 :
  • 英文 :


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

有人能帮我降低查询的复杂性吗。

使用以下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';  

我不知道查询的确切意图是什么,所以我将提供一些技术上的细微差别,而不实际了解您的数据模型或目标。select子句为您提供了一些列,您可能需要它。所以,我要查找的是重复的表联接。其中有些是必要的,有些是不必要的。

banking_financial_details

joinleft 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

从上面删除第二个JOINON子句,并替换查询中mccmc的所有用法。

案例分配

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

用户详细信息

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

摘要

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

最新更新