给出下表:
已安装的应用程序
MachineName | AppName | Version
-------------------------------
machine01 | App01 | 1.1
machine01 | App02 | 1.0
machine01 | App03 | 1.5
machine02 | App04 | 2.0
machine02 | App02 | 1.0
machine02 | App01 | 1.1
machine03 | App06 | 7.9.9
machine03 | App01 | 1.1
machine03 | App07 | 11.5
machine03 | App02 | 1.0
我需要选择给定“n”台机器通用的应用
。它是“n”组之间的交集。但是,我很难想出一个像样的查询。
我知道我可以做这样的事情:
SELECT AppName, Version
FROM InstalledApps
WHERE MachineName = 'machine01'
INTERSECT
SELECT AppName, Version
FROM InstalledApps
WHERE MachineName = 'machine02'
那会给我
AppName | Version
------------------
App01 | 1.1
App02 | 1.0
但是,有没有一种方法可以让我不必预先知道机器的数量就可以做到这一点?有点像
SELECT......
FROM InstalledApps
WHERE MachineName IN ('machine01',...'machine99')
最佳答案
我认为这应该适用于一般情况:
SELECT AppName, Version, COUNT(DISTINCT(MachineName)) AS MachineCount
FROM InstalledApps
GROUP BY
AppName, Version
HAVING
COUNT(DISTINCT(MachineName)) > 1
关于sql-server - SQL - 根据列查找公共(public)行(相交),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818067/