0

我试图想出一种从 mysql (5.6) 表中提取一些信息的方法。我有 4 列感兴趣:cname、路径、文件和哈希。我正在寻找具有相同哈希并且同时存在两个 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 上。

4

1 回答 1

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 匹配的所有哈希

于 2013-11-04T19:41:11.050 回答