如何选择仅具有w10兼容应用程序的机器和用户

时间:2018-08-04 09:38:15

标签: sql tsql

我的职业生涯大部分时间都在学习sql的数据平台,但是我想更多地参与查询。我正在制作自己的场景,并尝试从已创建的表中提取数据,但我遇到了麻烦。抱歉,这可能是一个简单的查询,但我希望您能启发我有关我做错的事情并提供帮助。前提是我有一个要重建的PC列表,但是仅基于它们上安装的所有应用程序是否都与Windows 10兼容的情况。

我有几张桌子。
Tbl_Windows_7_PCs 字段是 机器名称 IP地址 AssignedUser 申请

现在该表显示了多行,但没有主键。一个例子如下

Pc001    10.0.0.20   Joe Bloggs     Ms Word 2016
Pc001    10.0.0.20   Joe Bloggs     Ms Excel 2016
Pc001    10.0.0.20   Joe Bloggs     Ms Access 2016
Pc002    10.0.0.34   Jane Smith     Ms Excel 2016
Pc002    10.0.0.34   Jane Smith     Sage
Pc002    10.0.0.34   Jane Smith     Adobe Acrobat

我还有另一个表叫做Windows兼容应用程序

再次没有主键

Tbl_Win10_Compatible_Apps

字段只能是一个

应用

值是 MS Excel 2016 智者 Adobe Acrobat

因此,我想生成一个查询,该查询仅从tbl_Windows_7_PCs中选择的计算机名称和所分配的用户都存在于Tbl_Win10_Compatible_Apps中。

更重要的是,我不想撤回我仅想向机器和用户(单数)显示的所有行。

正如我正在学习的,如果有人能提供解决方案来解释他们如何得出解决方案,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我个人认为,使用IDENTITY向这些表添加主键并不是一个坏主意。

但我认为您正在寻找类似此查询的内容。

这是简单的LEFT JOIN,具有GROUP BY和HAVING。

SELECT w7pc.MachineName, w7pc.AssignedUser
FROM Tbl_Windows_7_PCs w7pc
LEFT JOIN Tbl_Win10_Compatible_Apps w10apps
  ON w10apps.Application = w7pc.Application
GROUP BY w7pc.MachineName, w7pc.AssignedUser
HAVING COUNT(w7pc.Application) = COUNT(w10apps.Application)

对于与w10apps记录不匹配的w7pc,w10apps.Application将为空。按值计数不会计算空值。因此,只有当它们全部匹配时,这两个计数才相等。