SQL: внутреннее и левое соединение с ошибкой идентификатора из нескольких частей - PullRequest
0 голосов
/ 30 октября 2011

У меня есть два запроса, как этот;

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 во втором запросе?

1 Ответ

2 голосов
/ 30 октября 2011

Отличие заключается в предложении multi-table 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 не определено, поэтому вы получите ошибку.

...