作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 SQL Server,但在尝试从我想要的 SELECT
查询中获取结果时遇到了困难。我尝试过加入不同的顺序并使用子查询,但没有什么能按照我想要的方式工作。以这个可能安装在人们计算机上的具有不同版本级别的软件应用程序为例。
我需要使用 WHERE
执行 JOIN
,但由于某种原因我无法获得我想要的结果。
也许我看的数据是错误的,我不太确定为什么我不能让它工作。
应用表
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
会包含应用程序表中的所有结果,即使它们与计算机无关。我错过了什么/做错了什么?
最佳答案
使用LEFT JOIN
或RIGHT JOIN
时,将过滤器放在WHERE
中还是放入中会有所不同加入
。
请参阅我不久前写的类似问题的答案:
What is the difference in these two queries as getting two different result set?
简而言之:
WHERE
子句中(就像您所做的那样,与该计算机无关的结果将被完全过滤掉JOIN
中,则与该计算机无关的结果将出现在查询结果中,仅具有 NULL
值关于sql-server - SQL Server : Multiple table joins with a WHERE clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8758223/
我是一名优秀的程序员,十分优秀!