mysql查询逻辑涉及同一列

时间:2013-11-04 18:52:59

标签: mysql

我正试图想出一种从mysql(5.6)表中提取一些信息的方法。我有4列感兴趣的:cname,path,file和hash。我正在寻找具有相同哈希值的文件,并且存在与BOTH cnames h1215和h1216相同的文件。例如,假设整个表格如下:

cname path      file     hash
h1215 c:\temp   abc.txt  123
h1215 c:\temp   abd.txt  213
h1216 c:\temp   abc.txt  123
h1216 c:\temp   bce.txt  678
h1216 c:\temp\a bce.txt  678

在这种情况下,我正在寻找带有散列123的行(#1和3)。显然会有多个匹配,并且对于任一cname,特定哈希可能会出现多次。此外,如果没有大量的手工工作,我不会提前知道哈希列表。这里只有一个,但在我的真实数据集中,可能会有大约3900个。理想情况下,我会回到一个匹配列表,因此在这个例子中有1行,#1或#3。我不想要第4行或第5行,因为它只存在于h1216上。

到目前为止,我提出的最好的是以下声明:

SELECT * , count( hash ) AS hashcount FROM `files` WHERE (`CName` = "h1215" OR
cname = 'h1216') AND Path LIKE 'c:\\\\temp\\\\%' GROUP BY hash HAVING hashcount >1

这很接近,但它并不能保证哈希出现在h1215和h1216上。例如,它可能不止一次出现在h1216上。

1 个答案:

答案 0 :(得分:0)

从您的示例中不清楚您希望计数显示什么,但此查询应该让您接近您想要的内容

SELECT *, count(hash) AS hash_count from files WHERE 
cname = 'h1215' 
AND path LIKE 'c:\\\\temp\\\\%'
AND hash IN 
(SELECT hash FROM files WHERE cname = 'h1216') 
GROUP BY hash

这将为您提供符合h1215和h1216

的所有哈希值