RIGHT JOIN, INNER JOIN - problem z edycją SQL

0

Na początku pragnę przywitać wszystkich, nie jestem informatykiem ani programistą i stąd mój problem. Posiadam accessa 2003 i na nim jest baza generowana z szablonu o nazwie Wprowadzanie zamówień. Chcę ją dostosować do mojej profesji ale utknąłem. Jest tam tabela o nazwie Metody spedycji, którą chcę usunąć bo nie będzie potrzebna. Generowany raport korzysta z tej tabeli w źródle rekordów przez zapytanie SQL

SELECT Zamówienia.*, [Szczegóły zamówień].IDszczegółuZamówienia, [Szczegóły zamówień].IDproduktu, [Szczegóły zamówień].Ilość, [Szczegóły zamówień].CenaJednostkowa, [Szczegóły zamówień].Rabat, Kontrahenci.ImięPrzedstawiciela, Kontrahenci.NazwiskoPrzedstawiciela, Kontrahenci.AdresRachunku, Kontrahenci.Miasto, Kontrahenci.KodPocztowy, Kontrahenci.Kraj, Kontrahenci.NrTelefonu, Kontrahenci.ImięPrzedstawiciela & " " & Kontrahenci.NazwiskoPrzedstawiciela AS Przedstawiciel, [Metody spedycji].MetodaSpedycji, Produkty.NazwaProduktu
FROM Kontrahenci 
RIGHT JOIN (Produkty INNER JOIN (([Metody spedycji] RIGHT JOIN (Pracownicy RIGHT JOIN Zamówienia ON Pracownicy.IDpracownika=Zamówienia.IDpracownika) ON [Metody spedycji].IDmetodySpedycji=Zamówienia.IDmetodySpedycji) RIGHT JOIN [Szczegóły zamówień] ON Zamówienia.IDzamówienia=[Szczegóły zamówień].IDzamówienia) ON Produkty.IDproduktu=[Szczegóły zamówień].IDproduktu) ON Kontrahenci.IDklienta=Zamówienia.IDklienta
ORDER BY Zamówienia.DataWysyłki;

Jest tu tyle zagnieżdżeń że się poddałem, zawsze wyskakuje jakiś błąd, trzeba usunąć odwołania do tabeli Metody spedycji.

Jeśli ktoś by mi pomógł byłbym bardzo wdzięczny.
Pozdrawiam

0

Zamówienia łączysz po metodzie spedycji więc musisz wymyślić inny sposób połączenia inaczej nie będziesz mógł połączyć tego wszystkiego bez tabeli metody spedycji. Pokaż może jakiś schemat albo coś to może po czymś innym da się połączyć

0

Wg mnie to zapytanie jest totalnie skopane... Pewnie działa, ale...
Skoro "zamówienia" są najważniejsze (a pewnie są, skoro jest *), to od nich należy wyjść i do tej tabeli wiązać pozostałe. LEFT JOINem, a nie RIGHT

0

Jeśli masz dużo zagnieżdżeń i się gubisz, to spróbuj sobie to sformatować tak, żeby gubić się trochę mniej. Na przykład tak:

SELECT Zamówienia.*
	,[Szczegóły zamówień].IDszczegółuZamówienia
	,[Szczegóły zamówień].IDproduktu
	,[Szczegóły zamówień].Ilość
	,[Szczegóły zamówień].CenaJednostkowa
	,[Szczegóły zamówień].Rabat
	,Kontrahenci.ImięPrzedstawiciela
	,Kontrahenci.NazwiskoPrzedstawiciela
	,Kontrahenci.AdresRachunku
	,Kontrahenci.Miasto
	,Kontrahenci.KodPocztowy
	,Kontrahenci.Kraj
	,Kontrahenci.NrTelefonu
	,Kontrahenci.ImięPrzedstawiciela & " " & Kontrahenci.NazwiskoPrzedstawiciela AS Przedstawiciel
	,[Metody spedycji].MetodaSpedycji
	,Produkty.NazwaProduktu
FROM Kontrahenci
RIGHT JOIN (
	Produkty 
	INNER JOIN (
		(
			[Metody spedycji] 
			RIGHT JOIN (
				Pracownicy 
				RIGHT JOIN Zamówienia ON Pracownicy.IDpracownika = Zamówienia.IDpracownika
			) ON [Metody spedycji].IDmetodySpedycji = Zamówienia.IDmetodySpedycji
		) 
		RIGHT JOIN [Szczegóły zamówień] ON Zamówienia.IDzamówienia = [Szczegóły zamówień].IDzamówienia
	) ON Produkty.IDproduktu = [Szczegóły zamówień].IDproduktu
) ON Kontrahenci.IDklienta = Zamówienia.IDklienta
ORDER BY Zamówienia.DataWysyłki;

Po takim sformatowaniu można dojść, że potrzebujesz PRAWDOPODOBNIE czegoś takiego:

SELECT Zamówienia.*
	,[Szczegóły zamówień].IDszczegółuZamówienia
	,[Szczegóły zamówień].IDproduktu
	,[Szczegóły zamówień].Ilość
	,[Szczegóły zamówień].CenaJednostkowa
	,[Szczegóły zamówień].Rabat
	,Kontrahenci.ImięPrzedstawiciela
	,Kontrahenci.NazwiskoPrzedstawiciela
	,Kontrahenci.AdresRachunku
	,Kontrahenci.Miasto
	,Kontrahenci.KodPocztowy
	,Kontrahenci.Kraj
	,Kontrahenci.NrTelefonu
	,Kontrahenci.ImięPrzedstawiciela & " " & Kontrahenci.NazwiskoPrzedstawiciela AS Przedstawiciel
	,Produkty.NazwaProduktu
FROM Kontrahenci
RIGHT JOIN (
	Produkty 
	INNER JOIN (
		(
			Pracownicy 
			RIGHT JOIN Zamówienia ON Pracownicy.IDpracownika = Zamówienia.IDpracownika
		) 
		RIGHT JOIN [Szczegóły zamówień] ON Zamówienia.IDzamówienia = [Szczegóły zamówień].IDzamówienia
	) ON Produkty.IDproduktu = [Szczegóły zamówień].IDproduktu
) ON Kontrahenci.IDklienta = Zamówienia.IDklienta
ORDER BY Zamówienia.DataWysyłki;

Przy czym zaznaczam, że z tymi wszystkimi nawiasami i RIGHT JOINami jest to kompletnie nieintuicyjne :)

1

Ja się przyznam, że jeżeli o sql z access to przy joinach powyżej 2 tabel korzystam edytora graficznego i Tobie też polecam.

0

Dziękuję wszystkim za pomoc, szczególnie koledze Fac w zrozumieniu jak radzić sobie z takimi zapytaniami poprzez odpowiednie sformatowanie. Poradziłem sobie w sposób jaki podał Panczo, choć było to przed jego postem, po prostu myślałem że jak kwerenda otwiera się w widoku SQL to nie można wykorzystać edytora graficznego, tym bardziej że wcześniej tworzyłem zapytanie składające (UNION ALL) i w tym wypadku to nie działało a wystarczyło tylko zmienić widok.

Pozdrawiam

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