Frage

Ich habe 2 Tische

requests (ID, company_id, amount)

companies (ID, name)

mit FK-Beschränkung (requests.company_id -> companies.id)

requests.company kann sein NULL

Ich muss alle Anfragen erhalten und ersetzen company_id mit geeigneter Gesellschaft name oder lassen Sie es leer, wenn kein Unternehmen angegeben wurde.

Ich habe die nächste Frage:

SELECT R.[ID], C.[name] AS [company], R.[amount], ...
FROM [requests] AS R, [companies] AS C, ...
WHERE R.[company_id] = C.[ID]

und es funktioniert gut, bis ein NULL-Wert eingegeben wird company Feld.

Als nächstes habe ich versucht:

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

Aber bekam

Der mehrteilige Bezeichner „R.company_id“ konnte nicht gebunden werden

Und die gleichen Fehler auf Feldern in ON Satzverschiebung.Was mache ich falsch?

War es hilfreich?

Lösung

Das Codebeispiel, das Sie gezeigt haben, hatte Ellipsen, und ich glaube, dass es die Ellipsen sind, die das Problem verursachen.

Du hast:

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

Nehmen wir an, das ist so etwas wie:

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

Mit anderen Worten: die Mischung der Inner-Join-Syntax vor ANSI 92 mit der Outer-Join-Syntax von ANSI 92.Beim Testen auf SQL Server 2005 scheint es, dass der Alias ​​R für Anfragen nicht hinter dem Komma zu sehen ist, das R von ... trennt.in Ihrem Beispiel und [Beispiel] als X in meinem.Folgendes hat jedoch funktioniert:

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

oder

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.

oder mein Favorit, weil ich die ANSI 92-Join-Syntax mag:

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

Andere Tipps

Ich glaube, Sie wollen:

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

EDIT: Siehe Kommentare, verbinden sie die linke benötigt ...

Es scheint mir auch, dass es für die Linke keine Notwendigkeit kommen, so können Sie neu schreiben wie:

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

Ändern der Tabellenreihenfolge in Komma macht in SQL Server 2005,2008 und 2012 funktioniert

z

Angenommen, Sie haben eine Abfrage wie unter denen haben in SQL 2005 fehlschlagen und oben:

SELECT t1.*,t2.*, t3.*
FROM table1 AS t1, table2 as t2 
LEFT OUTER JOIN table3 AS t3
ON t1.id = t3.id
WHERE t1.id = t2.id

Die Abfrage wird in SQL 2005 arbeiten und oben, wenn Sie die Abfrage neu zu schreiben und die Reihenfolge der Tabelle in dem Komma ändern, bevor die Verbindung. z

SELECT t1.*,t2.*, t3.*
FROM table2 as t2, table1 as t1 
LEFT OUTER JOIN table3 AS t3
ON t1.id = t3.id
WHERE t1.id = t2.id
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top