【问题标题】:SQL JOIN Optimization - Help NeededSQL JOIN 优化 - 需要帮助
【发布时间】:2023-01-27 00:23:24
【问题描述】:

有没有更好的方法来编写下面的查询-

基本上下面的 2 个表将从 details_2 表中提取大量数据,但会根据 #exceptions 表中编码的不同原因加入字段。如果我需要扩展我的问题并提供更多详细信息,请告诉我。

Select
a.Fieldname1,
a.Fieldname2,
a.fieldname3
from 
#Exceptions a, [DETAILS_2] b
where 

(case when a.REASON_CD = 'LOBMKT' then CONCAT(a.LOB_CD,a.GEO_MARKET) end = concat(b.LOB_CD,b.GEO_MARKET)) or
(case  when a.REASON_CD = 'LOB' then a.LOB_CD end  = b.LOB_CD) or
(case  when a.REASON_CD = 'CAT' then a.CTRCT_CAT_CD end  = b.CTRCT_CAT_CD) or
(case  when a.REASON_CD = 'LOBST' then CONCAT(a.LOB_CD,a.[derived_GEO_MARKET]) end = concat(b.LOB_CD,b.GEO_MARKET)) 

谢谢!

上面的代码是我试过的。

type here

【问题讨论】:

  • 欢迎来到堆栈溢出!为了帮助您解决query-optimization 问题,我们需要查看您的表定义、索引定义和 EXPLAIN 的输出。请read this,然后edit你的问题。而且,您有一个没有任何连接标准的逗号连接。
  • 请添加示例数据和所需的输出。
  • 看来您没有必要使用 CONCAT()。只是在没有看到示例数据和所需输出的情况下胡乱猜测。

标签: sql sql-server stored-procedures query-optimization inner-join


【解决方案1】:

(当心你正在做交叉连接)

SELECT a.Fieldname1,
       a.Fieldname2,
       a.fieldname3
FROM #Exceptions a,
     [DETAILS_2] b
WHERE (
          a.REASON_CD = 'LOBMKT'
          AND a.LOB_CD = b.LOB_CD
          AND a.GEO_MARKET = b.GEO_MARKET
      )
      OR
      (
          a.REASON_CD = 'LOB'
          AND a.LOB_CD = b.LOB_CD
      )
      OR
      (
          a.REASON_CD = 'CAT'
          AND a.CTRCT_CAT_CD = b.CTRCT_CAT_CD
      )
      OR
      (
          a.REASON_CD = 'LOBST'
          AND a.LOB_CD = b.LOB_CD
          AND a.[derived_GEO_MARKET] = b.GEO_MARKET
      );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2014-08-03
    相关资源
    最近更新 更多