Я использую 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
будет включать все результаты в таблицу приложений, даже если они не связаны с компьютером. Что я пропущу/делаю неправильно?