sql >> Databasteknik >  >> RDS >> Sqlserver

Den flerdelade identifieraren kunde inte bindas på SQL Server 2008

Kodexemplet du visade hade ellipser och jag tror att det är det som finns i ellipserna som orsakar problemet.

Du har:

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

Låt oss säga att det är något i stil med:

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

Med andra ord blandningen av syntax för inre anslutning före ANSI 92 med syntax för yttre anslutning till ANSI 92. Vid testning på SQL Server 2005 verkar det som om aliaset R för förfrågningar inte syns utanför kommatecknet som skiljer R från ... i ditt exempel, och [exempel] som X i mitt. Följande fungerade dock:

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

eller

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.

eller min favorit, eftersom jag gillar ANSI 92 join syntax:

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


  1. Hur man förbättrar ordning efter prestanda med joins i mysql

  2. SQL Server ROWLOCK över en SELECT om den inte existerar INSERT transaktion

  3. PostgreSQL:s array_agg() och array_to_string i MySQL

  4. MySQLi PHP:Kontrollera om SQL INSERT-frågan lyckades med MySQLi