首页 > 解决方案 > 如何检查是否有一些录音共享相同的名称,但它们在mysql中有不同的类型

问题描述

有一个包含 97972561 行(记录)和 4 列(属性)的表。格式如下:

+------+-------------+-------------+-------------+
| PMID | SUBJECT_NAME| SUBJECT_TYPE| Sentence_ID |
+------+-------------+-------------+-------------+

我想检查是否有一些主题与不同类型的名称相同。例如,一个表中有三个记录:

+------+-------------+-------------+-------------+
| PMID | SUBJECT_NAME| SUBJECT_TYPE| Sentence_ID |
+------+-------------+-------------+-------------+
| 1    | Bob         | F           | 1           |
+------+-------------+-------------+-------------+
| 2    | Bob         | B           | 2           |
+------+-------------+-------------+-------------+
| 3    | Bob         | F           | 3           |
+------+-------------+-------------+-------------+

我不关心有多少情况,只是想检查是否有两个录音具有相同的subject_name,但不同的subject_type。任何帮助,将不胜感激!

标签: mysql

解决方案


我会按主题名称聚合,然后断言 max 和 min 类型是不同的:

SELECT SUBJECT_NAME
FROM yourTable
GROUP BY SUBJECT_NAME
HAVING MIN(SUBJECT_TYPE) <> MAX(SUBJECT_TYPE);

请注意我编写HAVING子句的方式使其sargableSUBJECT_TYPE ,这意味着可能会使用任何索引。以下索引可能会加速此查询:

CREATE INDEX idx ON yourTable (SUBJECT_NAME, SUBJECT_TYPE);

推荐阅读