【问题标题】:How to get rid of duplicated pairs of id's from two column query result如何从两列查询结果中删除重复的 id 对
【发布时间】:2021-04-05 13:12:30
【问题描述】:

我在一张表中获得了文件信息,而在另一张表中存储了 file_id 和校验和。现在我想用校验和搜索表中的重复文件

SELECT A.file_id pid, B.file_id sid
FROM checksums A INNER JOIN checksums B ON A.checksum = B.checksum
WHERE A.file_id <> B.file_id
ORDER BY pid

我得到的结果还算不错,可以进一步处理后使用。我想知道的是我是否以及如何直接从查询中获得正确的结果。我的意思是在这两列中摆脱“交叉重复”。例如,如果具有 id 1File 与具有 id 43,77,14Files 重复>id 2id 74 的文件重复,然后我得到以下结果

| pid | sid |
=============
|  1  |  43 |
|  1  |  77 |
|  1  |  14 |
|  2  |  74 |
...
|  14 |   1 |
...
|  43 |   1 |
...
|  74 |   2 |
...
|  77 |   1 |
...

我想要实现什么来摆脱这些相反的一对以避免重复结果,SQL 中有没有办法做到这一点?

【问题讨论】:

  • 所有行都重复了吗?
  • 在我当前的查询结果中,所有行都有“相反对”

标签: sql sqlite duplicates inner-join self-join


【解决方案1】:

我认为不等式条件就足够了:

SELECT a.file_id pid, b.file_id sid
FROM checksums a 
INNER JOIN checksums b ON b.checksum = a.checksum
WHERE A.file_id < B.file_id
ORDER BY pid

【讨论】:

  • 谢谢,似乎按我最初的预期工作,但我仍然觉得你的解决方案太简单了,或者我没有足够的头脑来思考它。
  • @MoreThanChaos:这回答了您提出的问题。您想摆脱“镜像”记录:使用 &lt;(或类似地,&gt;)而不是 &lt;&gt; 仅此而已。
  • 不幸的是这还不够,我的担心成真了,测试确实表明它只适用于特定数据集的情况,当数据是“新鲜的”并且没有使用表时,一切都很好。当一些条目被删除并添加一些新条目时,例如应该有一行结果但它不起作用,因为 A A.file_id > B.file_id
猜你喜欢
  • 2022-11-04
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2020-02-16
相关资源
最近更新 更多