0

mysql (5.6) テーブルから情報を抽出する方法を考え出そうとしています。興味深いのは、cname、path、file、および hash の 4 つの列です。同じハッシュを持ち、cname 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 に対して複数回表示される場合があります。さらに、多くの手作業がなければ、事前にハッシュ リストを知ることはできません。ここでは 1 つしかありませんが、私の実際のデータ セットでは、約 3900 ある可能性があります。理想的には、一致のリストを取得するだけなので、この例では 1 行、つまり #1 または #3 です。h1216にのみ存在するため、行4または5は必要ありません。

これまでのところ、私が思いついた最高のものは次のステートメントです。

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