【发布时间】:2017-04-21 19:01:22
【问题描述】:
我有一个任意大的 MySQL 表,其中有重复的行,但是要确定哪些行是重复的,我需要匹配两列中的数据。修改后的sn-p表格如下。
mysql> select * from DATA_STATUS where METADATA_ID='6ac00785-abcd-3f4a-defg-12b8ed23abff';
+--------+------------+--------------------------------------+-------------+
| ID | STATUS | METADATA_ID | METADATA_FK |
+--------+------------+--------------------------------------+-------------+
| 1 | 3 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
| 2 | 3 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
| 3 | 0 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
| 4 | 0 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
| 5 | 1 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
| 6 | 2 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
我想对整个表进行选择,其中有多个相同的METADATA_ID,其中重复的METADATA_ID 行的STATUS 为 3。我知道如何在表中查询一列中的重复项,但我正在努力弄清楚如何匹配重复项和其他条件。
从示例数据来看,符合此条件的行 ID 是 1 和 2,但不是 3。
编辑:用于澄清和 TL;DR 条件的附加信息
重复的总体标准是STATUS=3 和METADATA_ID > 1,下面的sn-p 显示了符合此条件的行。
+--------+------------+--------------------------------------+-------------+
| ID | STATUS | METADATA_ID | METADATA_FK |
+--------+------------+--------------------------------------+-------------+
| 1 | 3 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
| 2 | 3 | 6ac00785-abcd-3f4a-defg-12b8ed23abff | 1234 |
+--------+------------+--------------------------------------+-------------+
我希望查询在找到重复项时仅拉回包含ID、STATUS 和METADATA_ID(METADATA_FK 是可选的)的一行,或者是所有重复项实例美好的。如果STATUS 不是3 或METADATA_ID 在表中仅存在一次,则数据不计为重复。
【问题讨论】:
标签: mysql duplicates