我认为标题很好地解释了我的问题,我在论坛上看了很多话题,但是我还是被困住了。我不太懂怎么做,也许这里的人能让我明白。(我希望)
我的疑问是:
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'我知道我必须用别名来表示“名字”,但我做不到。
就目前而言,我认为我对我的问题最好的回答是:
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'但是它不起作用,我有一个无效的名字错误。
谢谢您的帮助!
发布于 2019-12-03 10:09:35
如果列名在n个表之间是常见的,则需要对其进行限定,以便sql知道您的mean.This将使用哪一个。
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'如我所愿
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'发布于 2019-12-03 10:11:07
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 (更改了与实际表的名称相随的列名)。
发布于 2019-12-03 10:10:35
以下步骤显示SELECT语句的逻辑处理顺序或绑定顺序。此顺序确定何时在一个步骤中定义的对象可用于后续步骤中的子句。例如,如果查询处理器可以将FROM子句中定义的表或视图绑定到(access),则这些对象及其列可用于所有后续步骤。相反,由于SELECT子句是步骤8,所以前面的子句不能引用该子句中定义的任何列别名或派生列。但是,它们可以被后续的子句引用,例如ORDER子句。语句的实际物理执行由查询处理器确定,顺序可能与此列表不同。
注意,SELECT位于位置8,其中as JOIN和ON分别位于位置3和2。因此,不能引用在ON中的SELECT中定义的列的别名;因为SELECT还没有被处理。实际上,您可以在ORDER BY中引用一个列的别名(在相同范围内)的唯一位置。
如果您真的想这样做,您可以使用CROSS APPLY和VALUES操作符,但是(老实说)在ON中键入N而不是Name是更懒惰的做法:
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';https://stackoverflow.com/questions/59154516
复制相似问题