【问题标题】:SQL: Inner and Left Join with The multi-part identifier errorSQL:内部和左联接与多部分标识符错误
【发布时间】:2011-10-30 13:50:47
【问题描述】:

我有两个这样的查询;

SELECT  j.ID, j.Pkey, j.SUMMARY, j.CREATED, j.RESOLUTIONDATE
        ,j2.SUMMARY, j2.CREATED, j2.RESOLUTIONDATE, j3.SUMMARY, j3.CREATED, j3.RESOLUTIONDATE
FROM Jira.jiraissue As j
INNER JOIN Jira.issuelink i
    ON i.SOURCE =j.ID and i.SEQUENCE = 0
INNER JOIN Jira.jiraissue As j2
    ON i.DESTINATION =j2.ID
LEFT JOIN Jira.issuelink i2 
    ON i2.SOURCE = j.ID  and i2.SEQUENCE = 1
LEFT JOIN Jira.jiraissue As j3 
    ON i2.DESTINATION = j3.ID

这很好用。但是当我尝试(在内部连接部分之后)对另一个查询实施时,我得到了一个错误。

  SELECT A.pkey as KREDİ, A.SUMMARY , B.pname AS STATU, D.Sorumlu AS SORUMLU, A.CREATED, A.RESOLUTIONDATE, dbo.CUSTVAL(11931, A.ID, 'S') AS BAYİ, dbo.GetLastStatuTime(A.ID) AS SON_STATU_TAR,j2.SUMMARY, j2.CREATED,j2.UPDATED, j2.RESOLUTIONDATE, j3.SUMMARY, j3.CREATED, j3.UPDATED, j3.RESOLUTIONDATE
FROM Jira.jiraissue A, jira.issuestatus B, AspNetServicesDB.dbo.STATU_MAP D
INNER JOIN Jira.issuelink i
    ON i.SOURCE = A.ID and i.SEQUENCE = 0
INNER JOIN Jira.jiraissue As j2
    ON i.DESTINATION =j2.ID 
LEFT JOIN Jira.issuelink i2 
    ON i2.SOURCE = A.ID  and i2.SEQUENCE = 1
LEFT JOIN Jira.jiraissue As j3 
    ON i2.DESTINATION = j3.ID
WHERE A.issuestatus = B.ID
AND 'BAŞARAN OTOMOTİV' = dbo.CUSTVAL(11931, A.ID, 'S')
AND B.pname = D.JiraStatu collate Turkish_CS_AI
AND A.issuetype != 11

我只将j.ID 更改为A.ID。错误信息是;

The multi-part identifier "A.ID" could not be bound.
Msg 4104, Level 16, State 1, Line 8 
The multi-part identifier "A.ID" could not be bound.

我不明白为什么。表示Jira.jiraissue 表有ID 列。为什么j.ID 在第一个查询中有效,而A.ID 在第二个查询中无效?

【问题讨论】:

  • 如果注释掉 where 子句会发生什么?
  • 你不应该使用隐式语法,尤其是与显式语法结合使用时。
  • @HLGEM 我不明白你试图解释什么。你能详细解释一下吗?
  • 永远不要使用逗号连接,它们在与显式连接结合时无法正常工作。它们是一种 SQL 反模式,你应该在任何时候看到它们时补充它们,并且永远不要再写。

标签: sql sql-server database join


【解决方案1】:

不同之处在于第二个查询中的多表 from 子句:

FROM Jira.jiraissue A, jira.issuestatus B, AspNetServicesDB.dbo.STATU_MAP D
INNER JOIN Jira.jiraissue As j2 ON i.DESTINATION =j2.ID 

这被执行为:

FROM Jira.jiraissue A, (
    jira.issuestatus B, (
        AspNetServicesDB.dbo.STATU_MAP D
        INNER JOIN Jira.jiraissue As j2 ON i.DESTINATION =j2.ID 
    )
)

在最内层,A 没有定义,所以会出错。

【讨论】:

  • 所有类型的JOIN 都这样工作?还是只是INNER JOIN?你能给我一个页面或链接来解释所有 JOIN 是如何执行的吗?
猜你喜欢
  • 1970-01-01
  • 2016-10-28
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多