2017-06-28 6 views
0

Top-Aufzeichnung einer äußeren verbundenen TabelleWählen Besten 1 aus Tabelle

auswählen Der Versuch, wenn es keine Einträge in der Tabelle B sind dann null

da sein, wenn es dann ein nur der erste mehrere Datensätze sind, sollten ausgewählt sein.

baute ich diese Abfrage aber ich bekomme Fehler

SELECT DISTINCT 
     A.Col1 , A.Col2, B.Col2, B.Col3 
FROM 
     A LEFT OUTER JOIN (SELECT TOP 1 * FROM B WHERE B.Col1=A.Col1) A ON B.Col1=A.Col1 

Der mehrteilige Bezeichner „B.Col1“ nicht gebunden werden konnte.

Wer weiß, wie man das löst?

+0

Sie könnten eine 'OUTER APPLY' stattdessen verwenden möchten. – ZLK

+0

Die "B.Col1", die nicht gebunden werden kann, verweist auf den letzten Teil "B.Col1 = A.Col1", weil B ein Alias ​​der Tabelle in der Unterabfrage ist (die Sie auch als A aliased) und daher außerhalb nicht sichtbar ist die Unterabfrage Sie beziehen sich auch auf A.Col1 innerhalb der Unterabfrage, die auch nicht aufgelöst werden kann. Die Unterabfrage-Syntax ist viel schwerer zu lesen und zu warten. Verwenden Sie im Allgemeinen die CTE-Syntax. –

Antwort

2

Wenn Sie nur ein Spiel wollen, dann outer apply verwenden:

SELECT A.Col1 , A.Col2, B.Col2, B.Col3 
FROM A OUTER APPLY 
    (SELECT TOP 1 * 
    FROM B 
    WHERE B.Col1 = A.Col1 
    ) B; 
Verwandte Themen