编写此查询的更好方法
Posted
技术标签:
【中文标题】编写此查询的更好方法【英文标题】: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)
))
【问题讨论】:
【参考方案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
与任一表中的任何内容都不匹配。这是否重要,甚至相关,我们很难说......以上是关于编写此查询的更好方法的主要内容,如果未能解决你的问题,请参考以下文章
子选择或连接?有没有更好的方法来编写这个 mysql 查询?