SQL条件查询

时间:2014-12-08 22:05:23

标签: sql

我有一个我正在尝试的SQL查询,我确信这很简单,但我并不是那么精通,所以我无法理解它。我甚至不确定如何说出这个问题。无论如何,这就是我在看的东西:

我有一个包含以下列的表:Hostname,Path,Filename,Filesize

它本质上是许多计算机(主机名)的目录列表。

我想得到的是一个不同的主机名列表,其中该主机不存在两条路径。例如,获取所有没有相应C:\ users \ Jeff或C:\ users \ Mary目录的主机名。如果他们有两个中的一个,省略。如果这两个目录都不存在,则仅返回它们。

非常感谢任何帮助。谢谢!

3 个答案:

答案 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)

我建议将其分为两部分:

  1. 生成所有主机名列表。
  2. 生成包含您不想要的路径的所有主机名列表。
  3. 然后,使用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'));