【问题标题】:Is multiple left join is better and faster with same table ?同一张表的多个左连接是否更好更快?
【发布时间】:2018-08-02 20:01:45
【问题描述】:
SELECT
    E.Id, 
    E.Name, 
    CASE EL.Application_Level WHEN 33 then 1 ELSE 0 END As MyDisplayName,
    CASE EL1.Application_Level WHEN 34 then 1 ELSE 0 END As FoodTag
FROM
    Entity E 
    INNER JOIN dbo.Countries CN ON cn.id=E.COUNTRY_ID  
    LEFT JOIN dbo.Entity_Levels EL ON E.ID = EL.Entity_ID AND EL.Application_Level = 33
    LEFT JOIN dbo.Entity_Levels EL1 ON E.ID = EL1.Entity_ID AND EL1.Application_Level = 34

我想使用 OR 条件而不是使用同一个表的两个连接,因为将添加更多应用程序级别,我不想添加更多连接。

无论如何我可以使用或条件和一个连接并将多条记录合并到一条记录。

【问题讨论】:

  • 多个left joins 是更好的方法。
  • @GordonLinoff 我可以拥有超过 10 个应用程序级别。你还是更喜欢这么多的左加入?
  • 尝试将or 放入其中的两个连接中,看看性能会发生什么变化。

标签: sql sql-server join left-join


【解决方案1】:

由于您没有显示任何示例数据,这只是一个猜测,但看起来您可以通过仅对 ENTITY_LEVELS 表的 1 个连接来执行此类操作:

SELECT
E.Id, 
max(E.Name) as Name,
max(case when EL.application_level = 33 then 1 else 0 end) as MyDisplayName,
max(case when EL.application_level = 34 then 1 else 0 end) as FoodTag,
max(case when EL.application_level = 35 then 1 else 0 end) as RandomOtherThing
from entity E
INNER JOIN dbo.Countries CN ON cn.id=E.COUNTRY_ID  
LEFT JOIN dbo.Entity_Levels EL ON E.ID = EL.Entity_ID 
group by E.Id

【讨论】:

    【解决方案2】:
    SELECT E.Id
        ,E.Name
        ,CASE WHEN EL.Application_Level = 33
                 THEN 1
             ELSE 0
         END AS MyDisplayName
        ,CASE WHEN EL.Application_Level = 34
                THEN 1
             ELSE 0
         END AS FoodTag
    FROM Entity E WITH(NOLOCK) 
    INNER JOIN dbo.Countries CN WITH(NOLOCK) ON CN.id=E.COUNTRY_ID
    LEFT JOIN dbo.Entity_Levels EL WITH(NOLOCK) ON E.ID=EL.Entity_ID
    

    【讨论】:

    • 你应该简要介绍一下你做了什么特别的事情。
    • 为什么添加 with(nolock)?..任何具体原因?
    • 没有什么特别的,只是删除一个左连接并从第一个左连接中删除条件(AND EL.Application_Level = 33)。
    • 这将为同一记录提供多个结果.. 如果 entity_Levels 有两条记录..
    • 那么你必须使用由 hellion 回答的查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2015-07-24
    相关资源
    最近更新 更多