0

ここで少し「特別な」瞬間があります。基本的に、ファイルとその属性(サイズ、作成日など)を一覧表示するためのDBテーブルがあります。自称(境界線妄想)SQLウィズであるため、[INSERT ATTRIBUTEHERE]が複数回出現したファイルのみを個別にリストするという質の高い方法を理解できなかったときの驚きを想像できます。

たとえば、ファイルサイズ(または作成日)がテーブルに複数回表示されているすべてのファイルを表示したいが、それでも個別にリストしたいとします。または、さらに優れたアプリケーション:MD5ハッシュを共有するファイルのグループですが、複数回表示される(つまり、重複する)ファイルのみであり、各ファイルを個別に一覧表示したいと思います。明らかに、DBを複数回ループすることもできますが、1つのクエリに関心があります。何かご意見は?

一番。

[編集#1(カウントエラー)]

select * 
 from @foo where FileNameOnDisk in (
     select FileNameOnDisk, count([INSERT_ATTRIBUTE_HERE]) as num from @foo 
     group by FileNameOnDisk 
     having num > 1
 )order by FileNameOnDisk
4

2 に答える 2

1

私があなたを正しく理解していれば、SQLServerを使用して次のようなことを試すことができます

DECLARE @Table TABLE(
        ID INT IDENTITY(1,1),
        FullFileName VARCHAR(500),
        DateCreated DATETIME,
        FileSize INT
)

INSERT INTO @Table (FullFileName, DateCreated, FileSize) 
SELECT 'a','01 Jan 2000',10
INSERT INTO @Table (FullFileName, DateCreated, FileSize) 
SELECT 'b','02 Jan 2000',1000
INSERT INTO @Table (FullFileName, DateCreated, FileSize) 
SELECT 'c','01 Jan 2000',100
INSERT INTO @Table (FullFileName, DateCreated, FileSize) 
SELECT 'd','03 Jan 2000',10

SELECT  t.*
FROM    @Table t INNER JOIN
        (
            SELECT  FileSize
            FROm    @Table
            GROUP BY FileSize
            HAVING COUNT(ID) > 1
        ) FileSizes ON  t.FileSize = FileSizes.FileSize
于 2010-08-11T04:04:37.330 に答える
1

HAVING COUNT(someField)> 1でアプローチします。これはFileNameを使用したサンプルですが、もちろんMD5またはdatetimeフィールド用に変更することもできます。

declare @foo table (FileNameOnDisk varchar(100), MD5Hash varchar(100), CreatedOn smalldatetime)

INSERT Into @foo (FileNameOnDisk, MD5Hash, CreatedOn)
 VALUES ('foo', 'abc123', 'jan 1 2010'),
  ('bar', 'abc123', 'aug 1 2010'),
  ('ar', 'ajkfsd43', 'nov 1 2010'),
  ('baz', '44', 'sep 1 2010'),
  ('foo', 'abc123', 'aug 1 2010'),
  ('baz', '44', 'jan 1 2010')

 select * 
 from @foo where FileNameOnDisk in (
     select FileNameOnDisk from @foo 
     group by FileNameOnDisk 
     having COUNT(FileNameOnDisk) > 1
 )order by FileNameOnDisk
于 2010-08-11T04:09:38.847 に答える