2011-10-30 62 views
0

我有两个像这样的查询;SQL:内部和左侧加入多部分标识符错误

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 

This works great。但是当我尝试实现(在内部连接部分之后)到另一个查询时,出现错误。

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.IDA.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

+0

如果你注释掉where子句会发生什么? – arb

+0

YOu不应该使用隐式语法,并且当与显式语法结合时不应使用隐式语法。 – HLGEM

+0

@HLGEM我不明白你想要解释的。你能解释更多的细节吗? –

回答

2

不同的是FROM子句中的多表中的第二个查询:

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

在最里面的级别,A没有定义,所以你得到:

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

这被作为执行一个错误。

+0

谢谢!很好学习它。 –

+0

所有类型的'JOIN'都是这样工作的?或者只是'INNER JOIN'?你能告诉我一个页面或链接,可以解释所有JOIN是如何执行的? –

相关问题