sql - 根据列中的重复项选择行

标签 sql postgresql

我想找到一列中的所有重复项并显示主键以便清理它们。

因此,在学习了一系列教程之后,我得到了这个应该可以工作并且不返回任何行的东西,这很棒,因为这意味着我不需要清理任何东西。 'equipment_id'是表中的主键

SELECT
    equipment_id, tent_id, COUNT(*)
FROM
    equipment
GROUP BY
    equipment_id, tent_id
HAVING 
    COUNT(*) > 1

但是当我只是在不涉及主键列的情况下寻找这样的骗子时

SELECT
    tent_id, COUNT(*)
FROM
    equipment
GROUP BY
    tent_id
HAVING 
COUNT(*) > 1

我得到了 900 多个结果,这也很好,但我需要主键以便我知道要编辑哪些。

TABLE equipment

ROWS
equipment_id    tent type    tent_id    note
100             large        66666      out
101             small        66666      in
102             small        55555      in
103             large        44444      in
104             small        33333      out

我想要的结果是这样的

100      66666
101      66666

最佳答案

基本上你需要不同的 equipment_id 与分组的 tent_id

SELECT *
  FROM equipment
 WHERE tent_id IN
  (      
   SELECT tent_id
     FROM equipment
    GROUP BY tent_id
   HAVING COUNT(DISTINCT equipment_id) > 1
  );

Demo

关于sql - 根据列中的重复项选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469884/

相关文章:

sql - DB中的存储函数和 View 有什么区别?

sql - 如何使用 case 语句捕获 NULL 值

sql - 如何在 PostgreSQL 中生成月份列表?

postgresql - Apache Usergrid 计数器的替代方案

javascript - 当当前时间戳大于现有列中的固定时间戳值时删除记录

ruby-on-rails - Postgres 中的默认值何时在 Rails 回调链中分配?

针对 Access 2010 DB 的 SQL 语句不适用于 ODBC

javascript - 如何将 PostgreSQL 时间戳与 moment.js 进行比较并仅在日期基础上指定?

sql - PostgreSQL 中的 IN 语句性能(以及一般)

mysql - 我需要在不同的行上使用 mysql 表的逗号分隔值