Dlaczego LEFT, RIGHT, INNER JOIN mi nie działa?

0

Mam problem, otóż rezultat jakichkolwiek zapytań - left, right, inner JOIN jest taki sam jak przy samym JOIN. Nie wiem o co chodzi...

Przykładowe zapytane

select *
from Orders as O 
inner JOIN Employees as E
on O.EmployeeID = E.EmployeeID 

Posiadam SQL Server Managment Studio 2016

0

Pokaż jak wywołujesz lefta/righta i przykładową zawartość na której chcesz zastosować to zapytanie.

0

Taki objaw wystąpi, jeżeli zapytanie będzie zawierało warunek, w którym wystąpią obie powiązane tabele, np.

select * from dokument a inner join pozycja b on (a.id=b.id_dok) where a.rok=2016 and b.cena>180 

W powyższym zapytaniu, nie zależnie czy będzie inner, left czy right join zwróci nam te same rekordy. Aby zwracało wynik odpowiedni do użytego joina to warunki musimy przenieść z sekcji ogólnej zapytania do sekcji związanej z danym joinem, np.

select * from dokument a inner join pozycja b on (a.id=b.id_dok and a.rok=2016 and b.cena>180) 
0

Te dwa zapytania, które napisałeś dla inner joina działają tak samo, ale dla left joina już zadziałają inaczej.

To co następuje po WHERE jest filtrem na całe zapytanie, a nie filtrem dla złączenia.

SELECT * FROM dokument a LEFT JOIN pozycja b ON (a.id=b.id_dok) WHERE a.rok=2016 AND b.cena>180  

To zapytanie mówi weź wszystkie rekordy z DOKUMENTY oraz podłącz do nich pozycje po kluczu a.id=b.id_dok. Z tak powstałego zbioru weź tylko te rekordy dla, których a.rok = 2016 i b.cena > 180.
Dostaniesz zbiór dokumentów z 2016 z pozycjami cena > 180.

SELECT * FROM dokument a LEFT JOIN pozycja b ON (a.id=b.id_dok AND a.rok=2016 AND b.cena>180) 

To zapytanie mówi weź wszystkie rekordy z DOKUMENTY oraz podłącz do nich wszystkie pozycje po kluczu a.id=b.id_dok i podłącz tylko kiedy a.rok = 2016 a b.cena > 180.
Dostaniesz zbiór WSZYSTKICH dokumentów oraz podłączonymi pozycjami tylko dla dokumentów roku 2016 i ceny pozycji > 180.

Jeżeli użyjesz INNER JOINA to warunek złączenia jest jednocześnie filtrem, bo zwracana jest tylko część wspólna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1