使用一个字段很容易找到重复项:

SELECT email, COUNT(email) 
FROM users
GROUP BY email
HAVING COUNT(email) > 1

如果我们有桌子

ID   NAME   EMAIL
1    John   asd@asd.com
2    Sam    asd@asd.com
3    Tom    asd@asd.com
4    Bob    bob@asd.com
5    Tom    asd@asd.com

这个查询将为我们提供John、Sam、Tom、Tom,因为他们都有相同的email.

然而,我想要的是得到同样email and name的副本.

也就是说,我想得到"汤姆","汤姆".

我需要它的原因是:我犯了一个错误,允许插入重复的nameemail个值.现在我需要删除/更改副本,所以我需要先删除它们.

推荐答案

SELECT
    name, email, COUNT(*)
FROM
    users
GROUP BY
    name, email
HAVING 
    COUNT(*) > 1

只需在两列上分组即可.

注:较旧的ANSI标准是将所有非聚合列都包含在GROUP BY中,但随着"functional dependency":

在关系数据库理论中,函数依赖关系是数据库关系中两组属性之间的约束.换句话说,函数依赖关系是描述关系中属性之间关系的约束.

支持不一致:

Sql相关问答推荐

如何编写SQL查询,在2024年每月的第一个日期输出货币?

为什么Postgrs Planner会在输出部分中显示我在查询中不使用的列?'""

跨多列的PostgreSQL非不同对

如何在幂函数中正确使用Power()和Exp()

R中对Arrow duckdb工作流的SQL查询

使用WHERE子句进行筛选时,SQL SELECT查询返回总计数

直接加法(1+1)与聚合函数SUM(1+1)的区别是什么

SQL仅返回第一个字母在A-Z之间的值

不存在记录的国外关键点

按行值出现的顺序对行值进行分组

YEAR 函数仍然不可SARGable 吗?

具有多个表 JOINS 的 STRING_AGG 的替代方法 (SQL Server 2016)

如何优化仅返回符合条件的三条记录的查询?

基于字符串的SQL查询

PostgreSQL分割字符串为子词并判断其是否存在于其他字符串中

如何在插入时将字符串'03-January-2023'转换为日期时间

在 postgresql 中保存带有时间戳的几何类型数据

如何从 2 个 SQLite 表构建嵌套对象?

在给定列中具有特定值的行与 SQL 中的总行数的比率

查找距上一条记录大于或等于 30 天的记录