Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile associare l'identificatore in più parti in SQL Server 2008

L'esempio di codice che hai mostrato aveva i puntini di sospensione e credo che sia ciò che si trova nei puntini di sospensione a causare il problema.

Hai:

SELECT R.[ID], C.[name] AS [company], ...
FROM [requests] AS R, ...
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID

Diciamo che è qualcosa del tipo:

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

In altre parole, la combinazione della sintassi di inner join pre-ANSI 92 con la sintassi di inner join ANSI 92. Test su SQL Server 2005, sembra che l'alias R per le richieste non sia visto oltre la virgola che separa R da ... nel tuo esempio e [eXample] come X nel mio. Tuttavia, il seguente ha funzionato:

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

o

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.

o il mio preferito, perché mi piace la sintassi di join 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