首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在2别名sql server中使用相同的值

在2别名sql server中使用相同的值
EN

Stack Overflow用户
提问于 2015-09-21 12:36:41
回答 2查看 67关注 0票数 0

我有这样的疑问。

代码语言:javascript
复制
SELECT
  ( SELECT StatusName
   FROM dbo.LMS_MST_Status
   WHERE MainStatusId = a.ParentID ) +'-'+ StatusName AS Value,

  ( SELECT StatusName
   FROM dbo.LMS_MST_Status
   WHERE MainStatusId = a.ParentID ) +'-'+ StatusName AS [Text]
FROM dbo.LMS_MST_Status a
WHERE ParentID > 0
  AND MainStatusID IS NOT NULL
ORDER BY [Text]

我有两个别名,即值和文本,但两者的值是相同的。这些列是在前端处理的,所以我不能更改前端代码。我连化名都改不了。所以我像上面这样做了这个查询。但是我觉得这会影响我的应用程序的性能,因为我对这两个别名都使用子查询。它能被优化吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-21 12:51:11

试试left join

代码语言:javascript
复制
select
    b.StatusName +'-'+ a.StatusName AS [Value],
    b.StatusName +'-'+ a.StatusName AS [Text],
FROM dbo.LMS_MST_Status a
left join dbo.LMS_MST_Status b on a.ParentID = b.MainStatusId
WHERE ParentID > 0
AND MainStatusID IS NOT NULL
ORDER BY [Text]

您还可以尝试使用inner join(由@Damien_The_Unbeliever建议):

代码语言:javascript
复制
select
    b.StatusName +'-'+ a.StatusName AS [Value],
    b.StatusName +'-'+ a.StatusName AS [Text],
FROM dbo.LMS_MST_Status a
inner join dbo.LMS_MST_Status b on a.ParentID = b.MainStatusId
WHERE ParentID > 0
AND MainStatusID IS NOT NULL
ORDER BY [Text]

它不会创建任何null值,只有在满足a.ParentID = b.MainStatusId条件时才能获取数据。

票数 1
EN

Stack Overflow用户

发布于 2015-09-21 13:33:22

您还可以为此使用APPLY(CROSS or OUTER)

代码语言:javascript
复制
SELECT  ca.StatusName AS Value ,
        ca.StatusName AS [Text]
FROM    dbo.LMS_MST_Status a
        CROSS APPLY ( SELECT    StatusName + '-' + a.StatusName AS StatusName
                      FROM      dbo.LMS_MST_Status
                      WHERE     MainStatusId = a.ParentID
                    ) ca
WHERE   ParentID > 0
        AND MainStatusID IS NOT NULL
ORDER BY [Text]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32695412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档