【问题标题】:Better way of writing this query编写此查询的更好方法
【发布时间】:2014-07-21 20:20:52
【问题描述】:

我想知道是否可以用一个连接替换下面的内容并减少对整个选择周围的 ISNULL 的需求?

SELECT ISNULL(
(
 SELECT Locale FROM Users WHERE UserGuid = @UserGuid),
 (SELECT Locale FROM Companies WHERE CompanyGuid = 
   (SELECT CompanyGuid FROM UserCompany WHERE UserGuid = @UserGuid)
 ))

【问题讨论】:

    标签: sql-server tsql query-performance


    【解决方案1】:

    我认为这将是等效的:

    SELECT ISNULL(u.Locale, c.Locale)
    FROM Companies c
    INNER JOIN UserCompany uc ON c.CompanyGuid = uc.CompanyGuid
    LEFT OUTER JOIN Users u ON uc.UserGuid = u.UserGuid
    WHERE uc.UserGuid = @UserGuid
    

    注意:这假设 UserGuid 在 Users 和 UserCompany 中是唯一的。

    【讨论】:

    • 我能看到的唯一真正区别是 OP 的查询将始终返回一行,即使 @UserGuid 与任一表中的任何内容都不匹配。这是否重要,甚至相关,我们很难说......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多