这里有一点“特别”的时刻。基本上我有一个DB表来列出文件及其属性(大小,创建日期等)。作为一个自称为(临界妄想)的SQL-whiz,你可以想象我的惊喜,当我没有找到一个高质量的方式来单独列出[INSERT ATTRIBUTE HERE]多次出现的文件。
例如,假设我想查看文件大小(或创建日期)在表格中出现多次的所有文件,但我仍然希望它们单独列出。或者更好的应用程序:一组共享MD5哈希的文件,但只有多次出现的文件(即重复),我仍然想要独立列出每个文件。显然我可以多次遍历数据库,但我对单个查询感兴趣。有什么想法吗?
最佳。
[编辑#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
答案 0 :(得分:1)
如果我理解正确,使用Sql Server可以尝试类似
的内容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
答案 1 :(得分:1)
我会用HAVING COUNT(someField)>来接近它。 1.这是使用FileName的示例,但您当然可以为MD5或日期时间字段修改它。
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