2011-10-25 10 views
11

Mam dwa SELECT w SQL Server, takie jak:Jak wykonać LEFT JOIN w SQL Server między dwoma instrukcjami SELECT?

(SELECT [UserID] FROM [User]) 
(SELECT [TailUser], [Weight] FROM [Edge] WHERE [HeadUser] = 5043) 

Chcę wykonać LEFT JOIN pomiędzy tymi dwoma SELECT] na [UserID atrybutu i [TailUser] atrybutu. Chcę dołączyć istniejące rekordy w drugim zapytaniu z odpowiednimi rekordami w pierwszym zapytaniu i wartością NULL dla nieobecnych rekordów. Jak mogę to zrobić?

Odpowiedz

42
SELECT * FROM 
(SELECT [UserID] FROM [User]) a 
LEFT JOIN (SELECT [TailUser], [Weight] FROM [Edge] WHERE [HeadUser] = 5043) b 
ON a.UserId = b.TailUser 
1
select * 
from user 
left join edge 
on user.userid = edge.tailuser 
and edge.headuser = 5043 
+2

Nie używaj słowa "GDZIE", ponieważ anuluje to polecenie "LEWE DOŁĄCZ". Użyj: 'NA user.userid = edge.tailuser AND edge.headuser = 5043' –

+0

@ ypercube ah, dobry haczyk! Dzięki za poprawkę, jest ona naprawiona. –

1
SELECT [UserID] FROM [User] u LEFT JOIN (
SELECT [TailUser], [Weight] FROM [Edge] WHERE [HeadUser] = 5043) t on t.TailUser=u.USerID 
0

Spróbuj tego:

SELECT user.userID, edge.TailUser, edge.Weight 
FROM user 
LEFT JOIN edge ON edge.HeadUser = User.UserID 
WHERE edge.HeadUser=5043 

LUB

AND edge.HeadUser=5043 

zamiast GDZIE clausule.