无法在SQL Server 2008上绑定多部分标识符

aba*_*hev 5 t-sql sql-server inner-join sql-server-2008

我有2张桌子

requests(ID,company_id,amount)

companies(ID,name)

与FK约束(requests.company_id- > companies.id)

requests.companyNULL

如果没有指定公司,我需要获得所有请求并替换company_id为适当的公司name或将其留空.

我有下一个查询:

SELECT R.[ID], C.[name] AS [company], R.[amount], ...
FROM [requests] AS R, [companies] AS C, ...
WHERE R.[company_id] = C.[ID]
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到company字段为NULL .

我试着做下一个:

SELECT R.[ID], C.[name] AS [company], ...
FROM [requests] AS R, ...
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID
Run Code Online (Sandbox Code Playgroud)

但得到了

无法绑定多部分标识符"R.company_id"

ON子句移位中字段的错误相同.我究竟做错了什么?

Sha*_*nce 9

你展示的代码示例有省略号,我相信它是导致麻烦的省略号中的内容.

你有:

SELECT R.[ID], C.[name] AS [company], ...
FROM [requests] AS R, ...
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID
Run Code Online (Sandbox Code Playgroud)

让我们说这就是:

SELECT R.[ID], C.[name] AS [company], X.Field
FROM [requests] AS R, [eXample] as X 
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID
WHERE X.[request_id] = R.ID
Run Code Online (Sandbox Code Playgroud)

换句话说,将ANSI-92内连接语法与ANSI 92外连接语法混合.在SQL Server 2005上进行测试时,看起来请求的别名R不会超过在您的示例中将R与...分隔开的逗号,并且[eXample]在我的X中.然而,以下工作:

SELECT R.[ID], C.[name] AS [company], X.Field
FROM [eXample] as X, [requests] AS R 
-- Requests and companies on the same side of the comma
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID
WHERE X.[request_id] = R.ID
Run Code Online (Sandbox Code Playgroud)

要么

SELECT R.[ID], C.[name] AS [company], X.Field
FROM [requests] AS R LEFT OUTER JOIN [companies] AS C
    ON R.[company_id] = S.ID, [eXample] as X 
WHERE X.[request_id] = R.ID
-- Yuck, I would hate to find this. Not at all sure from reading
-- the code how it would work.
Run Code Online (Sandbox Code Playgroud)

或者我最喜欢的,因为我喜欢ANSI 92加入语法:

SELECT R.[ID], C.[name] AS [company], X.Field
FROM [requests] AS R
INNER JOIN [eXample] as X ON X.[request_id] = R.ID
LEFT OUTER JOIN [companies] AS C ON R.[company_id] = S.ID
Run Code Online (Sandbox Code Playgroud)

  • 表的别名在哪里为"S",以便约束"= S.ID"有效? (2认同)