mysql - 我想编写一个 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 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);
推荐阅读
- python - 加载 django admin 静态文件时遇到问题
- javascript - 我如何获得所有内容?
- python - 二合一游戏:掷骰子和宾果游戏
- clojure - catalina 上的 clojure cider lein 可执行文件不在您的“执行路径”上
- css - chrome浏览器开发工具中的px值与css像素值
- java - Java 文件输入错误 java.io.StreamCorruptedException:无效的流标头:22427275
- socks - 用于 ipv6 的 Dante SOCKS5 代理服务器配置
- xml - 如何使用元素属性将一些 xml 转换为固定长度的字符串来定义值长度
- mysql - 搜索类别计数到一个 id
- google-apps-script - 用户使用情况报告 - 未显示/未定义的 Gmail 参数(Google Admin SDK - 报告 API)