首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内部联接查询中使用别名?

在内部联接查询中使用别名?
EN

Stack Overflow用户
提问于 2019-12-03 10:03:47
回答 4查看 2.5K关注 0票数 0

我认为标题很好地解释了我的问题,我在论坛上看了很多话题,但是我还是被困住了。我不太懂怎么做,也许这里的人能让我明白。(我希望)

我的疑问是:

代码语言:javascript
复制
SELECT Name, A, B, C, D, E, F 
FROM Data 
    INNER JOIN User_Access ON Data.Name = User_Access.Name 
WHERE User_Access.Channel = 'TEST'

我知道我必须用别名来表示“名字”,但我做不到。

就目前而言,我认为我对我的问题最好的回答是:

代码语言:javascript
复制
SELECT Name AS N, A, B, C, D, E, F 
FROM Data 
    INNER JOIN User_Access ON Data.N = User_Access.Name 
WHERE User_Access.Channel = 'TEST'

但是它不起作用,我有一个无效的名字错误。

谢谢您的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-03 10:09:35

如果列名在n个表之间是常见的,则需要对其进行限定,以便sql知道您的mean.This将使用哪一个。

代码语言:javascript
复制
SELECT data.Name, A, B, C, D, E, F 
FROM Data 
    INNER JOIN User_Access ON Data.Name = User_Access.Name 
WHERE User_Access.Channel = 'TEST'

如我所愿

代码语言:javascript
复制
SELECT d.Name, A, B, C, D, E, F 
FROM Data d
    INNER JOIN User_Access ON d.Name = User_Access.Name 
WHERE User_Access.Channel = 'TEST'
票数 0
EN

Stack Overflow用户

发布于 2019-12-03 10:11:07

代码语言:javascript
复制
SELECT User_Access.Name, A, B, C, D, E, F 
FROM Data 
    INNER JOIN User_Access ON Data.N = User_Access.Name 
WHERE User_Access.Channel = 'TEST'

我已将名称(如关键字)替换为User_Access.Name (更改了与实际表的名称相随的列名)。

票数 1
EN

Stack Overflow用户

发布于 2019-12-03 10:10:35

来自SELECT语句的逻辑处理顺序

以下步骤显示SELECT语句的逻辑处理顺序或绑定顺序。此顺序确定何时在一个步骤中定义的对象可用于后续步骤中的子句。例如,如果查询处理器可以将FROM子句中定义的表或视图绑定到(access),则这些对象及其列可用于所有后续步骤。相反,由于SELECT子句是步骤8,所以前面的子句不能引用该子句中定义的任何列别名或派生列。但是,它们可以被后续的子句引用,例如ORDER子句。语句的实际物理执行由查询处理器确定,顺序可能与此列表不同。

  1. 从…
  2. 在……上面
  3. 加入
  4. 哪里
  5. 按组
  6. 用立方体或卷起
  7. 选择
  8. 分异
  9. 命令由
  10. 顶部

注意,SELECT位于位置8,其中as JOINON分别位于位置3和2。因此,不能引用在ON中的SELECT中定义的列的别名;因为SELECT还没有被处理。实际上,您可以在ORDER BY中引用一个列的别名(在相同范围内)的唯一位置。

如果您真的想这样做,您可以使用CROSS APPLYVALUES操作符,但是(老实说)在ON中键入N而不是Name是更懒惰的做法:

代码语言:javascript
复制
SELECT V.N, D.A, D.B, D.C, D.D, D.E, D.F --I assume there are all from the Data table
FROM Data D
    CROSS APPLY (VALUES(D.[Name])) V(N)
    INNER JOIN User_Access UA ON V.N = UA.Name 
WHERE UA.Channel = 'TEST';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59154516

复制
相关文章

相似问题

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