mysql - SQL - 为具有重复值的列集选择所有主键

标签 mysql

将表格视为-

mysql> SELECT * FROM DB;

+------+--------+------+------------+---------+
| UDID | BENEID | DEPT | SCHEME     | NAME    |
+------+--------+------+------------+---------+
|    1 |     55 | TCS  | RC         | SHELLY  |
|    2 |     95 | TCS  | RC         | BOB     |
|    3 |     75 | TCS  | RC         | ULRICH  |
|    4 |     55 | TCS  | RC         | SHELLY  |
|    5 |     85 | TCS  | FS         | SHELLY  |
|    6 |     65 | DSSP | ABC        | BOB     |
|    7 |     65 | DSSP | ABC        | BOB     |
|    8 |     75 | DSSP | ABC        | ULRICH  |
+------+--------+------+------------+---------+

beneid、deptscheme 列的集合有重复的值,具有不同的主键、udid。也就是说,

mysql> SELECT DEPT, SCHEME, BENEID, COUNT(*) AS CN FROM DB GROUP BY 1, 2, 3 HAVING CN >1;
+------+--------+--------+----+
| DEPT | SCHEME | BENEID | CN |
+------+--------+--------+----+
| DSSP | ABC    |     65 |  2 |
| TCS  | RC     |     55 |  2 |
+------+--------+--------+----+

我们有 2 个重复的 dept、scheme、beneid 列,但具有不同的主键 (udid)。 我如何列出上述结果的 udid?

预期的表结构-

+------+--------+--------+----+-----+
| DEPT | SCHEME | BENEID | CN | UDID|
+------+--------+--------+----+-----+
| DSSP | ABC    |     65 |  2 | 6   |
| DSSP | ABC    |     65 |  2 | 7   |
| TCS  | RC     |     55 |  2 | 1   |
| TCS  | RC     |     55 |  2 | 4   |
+------+--------+--------+----+-----+

最佳答案

您需要“返回”原始表,方法是过滤此表中您发现的重复行。

例子:

SELECT DB.DEPT, DB.SCHEME, DB.BENEID, DUPS.CN, DB.UID
FROM DB
INNER JOIN
  (
    SELECT DEPT, SCHEME, BENEID, COUNT(*) AS CN
    FROM DB GROUP BY 1, 2, 3 HAVING CN >1
  ) AS DUPS ON DB.DEPT = DUPS.DEPT
     and DB.SCHEME = DUPS.SCHEME
     and DB.BENEID = DUPS.BENEID

关于mysql - SQL - 为具有重复值的列集选择所有主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31354623/

相关文章:

mysql - "rake aborted! uninitialized constant {My App Name}"怎么解决?

python - 在 python 中作为查询传递时如何禁用字符串周围的引号?

mysql - 在 mysql 列中使用另一个查询

mysql - #1064 MySQL 错误。带有 MRG_MYISAM 引擎的 utf8_general_ci

php - WHERE 子句和 INT(11) 数据类型在 MySQL 中不起作用

php - 通过 PHP 从一张表插入另一张 MySQL

php - 如何在表单中的文本框旁边显示消息?

php - 向现有实体添加额外的 SELECT 表达式结果

php - 使用 get_object_vars () 后从 select 语句获取变量;

php - 根据计划中的每一列更新另一列的值