Я использую SQL Server и с трудом пытаюсь получить результаты запроса SELECT
, который мне нужен. Я пробовал объединяться в разные порядки и использовать подзапросы, но ничего не получается так, как я хочу. Возьмите этот надуманный пример программных приложений с разными уровнями версий, которые могут быть установлены на компьютерах других пользователей.
Мне нужно выполнить JOIN
с WHERE
, но по какой-то причине я не могу получить желаемые результаты.
Может быть, я неправильно смотрю на свои данные, я не совсем уверен, почему я не могу заставить это работать.
Приложение Таблица
ID Name
1 Word
2 Excel
3 Powerpoint
Программное обеспечение Таблица (содержит информацию о версии для различных приложений)
ID ApplicationID Version
1 1 2003
2 1 2007
3 2 2003
4 2 2007
5 3 2003
6 3 2007
Software_Computer распределительная таблица
ID SoftwareID ComputerID
1 1 1
2 4 1
3 2 2
4 5 2
Компьютер Стол
ID ComputerName
1 Name1
2 Name2
Я хочу запрос, который я мог бы выполнить, когда я выбираю определенный компьютер, чтобы показать, какая версия программного обеспечения и приложения имеет, но я также хочу, чтобы он отображал, какое приложение у него нет (версия будет NULL
, так как на нем нет этого программного обеспечения)
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
Я хочу следующий набор результатов
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Name1 Powerpoint NULL
Но я просто получаю
Results
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Я думал, что RIGHT JOIN
будет включать все результаты в таблицу приложения, даже если они не связаны с компьютером. Что я пропускаю / делаю неправильно?