我有一个我正在尝试的SQL查询,我确信这很简单,但我并不是那么精通,所以我无法理解它。我甚至不确定如何说出这个问题。无论如何,这就是我在看的东西:
我有一个包含以下列的表:Hostname,Path,Filename,Filesize
它本质上是许多计算机(主机名)的目录列表。
我想得到的是一个不同的主机名列表,其中该主机不存在两条路径。例如,获取所有没有相应C:\ users \ Jeff或C:\ users \ Mary目录的主机名。如果他们有两个中的一个,省略。如果这两个目录都不存在,则仅返回它们。
非常感谢任何帮助。谢谢!
答案 0 :(得分:4)
单程
SELECT HostName
FROM YourTable
GROUP BY HostName
HAVING COUNT(CASE WHEN Path IN ('C:\users\Jeff',
'C:\users\Mary') THEN 1 END) =0;
答案 1 :(得分:2)
我建议将其分为两部分:
然后,使用MINUS
(自动删除重复项)以获得唯一结果:
SELECT hostname
FROM table
MINUS
SELECT hostname
FROM table
WHERE path IN ('/search/path/one', '/search/path/two')
您也可以使用反加入而不是MINUS
,但我会将其留给您。
答案 2 :(得分:1)
select distinct hostname from your_table t1
where not exists (select 1 from your_table t2
where t2.hostname = t1.hostname
and t2.path in ('C:\users\Jeff', 'C:\users\Mary'));