首页 > 解决方案 > 我想编写一个 mySQL SELECT 查询来消除在一列中具有重复值的行

问题描述

在我的 SQL

SELECT DISTINCT uID FROM table

返回具有单个 uID 列的记录集,其中重复值被过滤掉。

我正在寻找的是类似的东西

SELECT * FROM table (and the uID column is distinct)

也就是说, 如果 uID 值为 DISTINCT ,则返回所有列

编辑:这是所要求的完整表结构

CREATE TABLE yourTable (
ID int(10) NOT NULL auto_increment,
studyID int(10),
uID varchar(50),
---
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

标签: mysql

解决方案


在 MySQL 8+ 上,我们可以COUNT在这里用作分析函数:

WITH cte AS (
    SELECT *, COUNT(*) OVER (PARTITION BY uID) AS cnt
    FROM yourTable
)

SELECT *
FROM cte
WHERE cnt = 1;

在早期版本的 MySQL 中,我们可以使用存在逻辑,前提是存在另一个对于每条记录始终唯一的列。假设id存在这样的列,我们可以尝试:

SELECT *
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable t2
                  WHERE t2.uID = t1.uID AND t2.id <> t1.id);

推荐阅读