Używam programu SQL Server i mam trudny czas próbując uzyskać wyniki z zapytania SELECT
, które chcę. Próbowałem łączenia w różnych zamówień i przy użyciu podzapytania, ale nic nie działa tak, jak chcę. Weź ten wymyślony przykład aplikacji z różnymi poziomami wersji, które mogą być instalowane na komputerach ludzi.Serwer SQL: łączenie wielu tabel z klauzulą WHERE
Muszę wykonać JOIN
z WHERE
, ale z jakiegoś powodu nie mogę uzyskać wyników, które chcę.
Może patrzę na moje dane źle, nie jestem do końca pewien, dlaczego nie mogę tego zrobić.
Zastosowanie stół
ID Name
1 Word
2 Excel
3 Powerpoint
Software stołowy (zawiera informacje o wersji dla różnych zastosowań)
ID ApplicationID Version
1 1 2003
2 1 2007
3 2 2003
4 2 2007
5 3 2003
6 3 2007
Software_Computer tabeli junction
ID SoftwareID ComputerID
1 1 1
2 4 1
3 2 2
4 5 2
Computer stół
ID ComputerName
1 Name1
2 Name2
Chcę zapytać, że mogę uruchomić gdzie wybrać konkretny komputer w celu wyświetlenia konkretnych wersji oprogramowania i aplikacji ma, ale ja też chcę go do wyświetlania co aplikacja nie robi mieć (wersja byłaby NULL
ponieważ nie ma tego oprogramowania na nim)
SELECT Computer.ComputerName, Application.Name, Software.Version
FROM Computer
JOIN Software_Computer
ON Computer.ID = Software_Computer.ComputerID
JOIN Software
ON Software_Computer.SoftwareID = Software.ID
RIGHT JOIN Application
ON Application.ID = Software.ApplicationID
WHERE Computer.ID = 1
chcę następujący zestaw wyników
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Name1 Powerpoint NULL
Ale ja po prostu
Results
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Myślałem, że RIGHT JOIN
obejmowałby wszystkie wyniki w tabeli aplikacji, nawet jeśli nie są one związane z komputerem. Czego mi brakuje/robię źle?
Może to dlatego, że jestem wysoki, ale czy nie ograniczasz Aplikacji przez oprogramowanie komputerowe? A czy nie ma tylko dwóch programów należących do komputera 1? Ponadto, czy lewe połączenie nie powinno mieć wpływu na prawe połączenie? Muszę to sprawdzić. A PowerPoint ma wersję, więc dlaczego miałbyś oczekiwać wartości null? Ponadto, w wielu wersjach dla aplikacji, w tabeli oprogramowania na komputery, musisz także zachować identyfikator wersji, inaczej będziesz miał wszystkie rodzaje pomieszanych wyników. – frostymarvelous