【问题标题】:How to select unique rows from a query that returns multiple duplicate records?如何从返回多个重复记录的查询中选择唯一行?
【发布时间】:2021-09-29 06:19:23
【问题描述】:

我有一个场景,其中一个表包含一个哈希值和一个文件路径,其中存在具有相同内容但不同行中的元数据不同的文件。我想生成一个列表,其中包含一个文件 + 每个哈希的路径,仅使用 sqlite SQL。

例子:

hash    filename    path
abc123  foo.txt     /tmp/
abc123  bar.txt     /tmp/
xyz890  image.png   /home/user4
xyz890  image2.png  /home/user2

理想的输出是:

abc123 /tmp/foo.txt
xyz890 /tmp/image2.png

最好的方法是什么?

【问题讨论】:

  • 理想输出有什么意义?你当然可以组合哈希,但是 bar.txt、image.png、/home/user2 和 /home/user4 去哪儿了?
  • 也许更好的表达方式是我只需要知道每个哈希的第一个结果。
  • select hash, filename, path from table group by hash 可以工作吗?但是文件名/路径值可以是与哈希匹配的任何值(根据此处的答案:stackoverflow.com/questions/17277152/…)如果不是简单的东西,例如:SELECT hash, min(filename), path from table 应该可以工作。
  • 理想的输出没有意义。

标签: sql sqlite


【解决方案1】:

输出显示第一个哈希需要第一条记录,第二个哈希需要第二行。根据您在开始时写的内容,我想输出类似于

abc123 /tmp/foo.txt
xyz890 /tmp/image.png

您可以使用相关子查询获得所需的结果

select hash, path 
  from your_table t1
 where (t1.path, t1.filename) = (select path, filename 
                                   from your_table t2 
                                  where t2.hash = t1.hash limit 1)

至少它确实对您提供给我们的数据起作用

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多