[SQL] Outer join

Awatar użytkownika
lightinside
Użytkownik
Użytkownik
Posty: 796
Rejestracja: 25 lis 2011, o 22:25
Płeć: Kobieta
Lokalizacja: Poznań/Łódź
Podziękował: 111 razy
Pomógł: 29 razy

[SQL] Outer join

Post autor: lightinside »

Mam outer join-a który pokazuje pracowników nie zatrudionych w projekcie....
Co zrobić aby pokazywał tylko tych niezatrudnionych w projekcie 10? znaczy o id 10


Kod: Zaznacz cały

	select DISTINCT nazwisko
		from pracownicy FULL OUTER join REALIZACJE 
			on pracownicy.id = realizacje.idPrac
		FULL OUTER JOIN PROJEKTY
			ON REALIZACJE.idProj=PROJEKTY.ID 
			WHERE  and nazwa is null

Ostatnio zmieniony 10 sty 2014, o 16:33 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[SQL] Outer join

Post autor: Afish »

Dodać warunek na id do klauzuli WHERE. Poza tym to zapytanie jest niepoprawne składniowo, a nawet gdyby było, to pokazywałoby wszystkie możliwe nazwiska.
Chromosom
Moderator
Moderator
Posty: 10365
Rejestracja: 12 kwie 2008, o 21:08
Płeć: Mężczyzna
Podziękował: 127 razy
Pomógł: 1271 razy

[SQL] Outer join

Post autor: Chromosom »

Potrzebujesz tylko pracowników powiązanych z realizacjami. Brak zatrudnienia pracownika przy projekcie o ID 10 może wiązać się z brakiem zatrudnienia przy żadnym projekcie, czyli potrzebujemy left outer join aby wyświetlić pracowników, dla których ID projektu to null. Jednakże right outer join nie jest nam do niczego potrzebny, jako że wtedy otrzymalibyśmy ewentualne realizacje, przy których nazwisko pracownika to null. Dlatego możemy zastąpić full outer join przez left outer join.

Nie potrzebujesz połączenia trzech tabel - wystarczą dwie, jako że informacja na temat ID projektu znajduje się w tabeli realizacje. Gdybyś chciała wyszukać informacje na temat pracowników nie zatrudnionych przy projekcie o określonej nazwie, wtedy jedno z możliwych rozwiązań można by uzyskać na podstawie połączenia trzech tabel.

W tym miejscu jest błąd:

Kod: Zaznacz cały

WHERE  and nazwa is null
odpowiada to zdaniu logicznemu \(\displaystyle{ \wedge p}\), które nie ma sensu

Zamiast spójnika AND, musisz zastosować OR, a zamiast polecenia na temat nazwy null, musisz sprawdzić, kiedy ID projektu wynosi null - odpowiada to sytuacji, gdy dany pracownik nie jest zatrudniony przy żadnej realizacji. Spróbuj samodzielnie napisać warunek, w którym ID projektu będzie różne od 10. U mnie wszystko działa
Awatar użytkownika
lightinside
Użytkownik
Użytkownik
Posty: 796
Rejestracja: 25 lis 2011, o 22:25
Płeć: Kobieta
Lokalizacja: Poznań/Łódź
Podziękował: 111 razy
Pomógł: 29 razy

[SQL] Outer join

Post autor: lightinside »

to and to pozostałość od tego jak pisałam REALIZACJE.idProj= 10 and nazwa is null,

Zapomniałam usunąć

Mój kod ( z wyjątkiem tego omyłkowego and ) działa poprawnie wyświetla to co trzeba, skąd to wiem? Bo mamy zadania i screnny co powinno wyjść i to wychodzi, gdy dodaje linijkę realizacje.idproj=10

To nie uzyskuje już tego co powinnam...
Chromosom
Moderator
Moderator
Posty: 10365
Rejestracja: 12 kwie 2008, o 21:08
Płeć: Mężczyzna
Podziękował: 127 razy
Pomógł: 1271 razy

[SQL] Outer join

Post autor: Chromosom »

W ten sposób wyszukujesz pracowników, którzy brali udział w projekcie 10. Musisz użyć operatora <>.
ODPOWIEDZ