Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nie można powiązać wieloczęściowego identyfikatora w SQL Server 2008

Pokazany przez Ciebie przykład kodu miał elipsy i wierzę, że to właśnie one powodują problemy.

Masz:

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

Powiedzmy, że jest to coś takiego:

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

Innymi słowy, mieszanie składni sprzężenia wewnętrznego sprzed ANSI 92 ze składnią sprzężenia zewnętrznego ANSI 92. Testując na SQL Server 2005, okazuje się, że alias R dla żądań nie jest widoczny po przecinku oddzielającym R od ... w twoim przykładzie, a [przykład] jako X w moim przykładzie. Działały jednak następujące:

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

lub

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.

lub mój ulubiony, ponieważ lubię składnię złączenia 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wartość od step1 do step2 w sql Job

  2. SQL, aby znaleźć pierwszy nienumeryczny znak w łańcuchu

  3. Jak uzyskać listę dat rozpoczęcia tygodnia (poniedziałek) i daty zakończenia (niedziela) między dwiema datami?

  4. Unikaj kolumn NULL, używając DEFAULT Empty String

  5. Uzyskać wszystkie nazwy tabel w określonej bazie danych za pomocą zapytania SQL?