Zapytanie LEFT JOIN

0

Witam, próbuję stworzyć zapytanie do bazy danych które wyświetli mi kierowców którzy nie są przypisani do rzadengo dr_id w tabeli orders w określonym dniu. Doszedłem do takiej wersji

SELECT a.dr_id,a.name FROM drivers a LEFT JOIN orders b ON b.dr_id=a.dr_id LEFT JOIN date c ON b.dat_id=c.dat_id WHERE b.dr_id IS NULL; 

i nie wiem jak dodać warunek sprawdzający tylko w konkretnym dniu.
Struktura tabel wygląda tak [URL=http://www.imagebam.com/image/261f6d461885555][IMG]http://thumbnails113.imagebam.com/46189/261f6d461885555.jpg[/IMG][/URL]
Proszę o pomoc z góry dziękuje.

0

Skoro Twoje aktualne zapytanie jest okej, to pewnie coś takiego zadziała:

SELECT a.dr_id,a.name FROM drivers a LEFT JOIN orders b ON b.dr_id=a.dr_id LEFT JOIN DATE c ON b.dat_id=c.dat_id AND c.data='28-01-2016' WHERE b.dr_id IS NULL;
0

Nie działa jak by nie sprawdza warunku związanego z datą, jesli jego id nie jest przypisane do daty np. 2016-02-01 ale jest przypisane do innych dni to zapytanie go nie wyświetla czyli sprawdza całą tabele a nie tylko rekordy z wybraną datą.

0

Warunek na datę powinien być w klauzuli WHERE, a nie w JOINie.
Po drugiej w jakim formacie trzymasz datę ? Jak w formacie date to użyj funkcji TO_DATE('data','format wpisanej daty').

0

Niestety też nie zadziała próbowałem zamiast daty jej id gdzie typ to INT i też nie zwraca tego co oczekuje.

0

Ok, łączysz się do zamówień a potem do dat na podstawie zamówienia. Przy czym dajesz warunek, że chcesz zobaczyć tylko tych kierowców, którzy nigdy nie mieli zamówienia. Skoro tak to logiczne jest, że pokażesz rekordy w których nie dołączyłeś się do dat, więc warunek na datę nie ma żadnego sensu.

I w ogóle złączenie do dat nie ma sensu w kontekście tego warunku na IS NULL, bo zawsze dostaniesz NULLe z ostatniej tabeli.

EDIT: Edit bo trochę namieszałem.

1

To powinno zadziałać:

SELECT a.dr_id,a.name 
	FROM drivers a
	LEFT JOIN( 
		SELECT b.br_id 
			FROM orders b
			LEFT JOIN DATE c ON b.dat_id=c.dat_id
			WHERE c.data = TO_DATE('20150128','YYYYMMDD')
		) b ON b.br_id=a.br_id
WHERE b.br_id IS NULL;
0

podaj zapytani, które Ci nie działa bo warunek na datę w WHERE MUSI działać

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