我的职业生涯大部分时间都在学习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中。
更重要的是,我不想撤回我仅想向机器和用户(单数)显示的所有行。
正如我正在学习的,如果有人能提供解决方案来解释他们如何得出解决方案,我将不胜感激。
答案 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将为空。按值计数不会计算空值。因此,只有当它们全部匹配时,这两个计数才相等。