从mySQL数据库中删除重复列的重复行

时间:2014-04-17 01:10:29

标签: mysql sql wordpress phpmyadmin duplicates

我有一个类似的wordpress表(phpmyadmin和MySQL)

| id |  meta_key | meta_value |
+----+-----------+------------+
| 1  | import_id | abc        |
| 2  | import_id | abc        |
| 3  | import_id | def        |
| 4  | import_id | xyz        |
| 5  | import_id | xyz        |
| 6  | import_id | xyz        |
| 7  | something | 123        |
| 8  | something | 234        |
+----+-----------+------------+

我需要获取所有重复行的id,其中meta_key ='import_id'

为了从另一张桌子上删除它们。

我想保留每个返回行的MIN(id),其中'meta_value'是相同的

即输出应为:

| id |  meta_key | meta_value |
+----+-----------+------------+
| 2  | import_id | abc        |
| 3  | import_id | def        |
| 6  | import_id | xyz        |
+----+-----------+------------+

或只是

| id |
+----+
| 2  | 
| 3  | 
| 6  | 
+----+

请帮助,因为这可能是一个重复的问题我仍然遇到麻烦,因为我的SQL有点生疏。

我可以像meta_key ='import_id'那样得到重复项:

SELECT id,meta_value
FROM TABLE 
WHERE meta_key='import_id'
GROUP BY meta_value
HAVING Count(meta_value) > 1

我想从中得到NON MIN(id)值

3 个答案:

答案 0 :(得分:1)

以下查询应返回对的所有非最小ID:

select t.id
from table t
where t.meta_key = 'import_id' and
      exists (select 1
              from table t2
              where t2.meta_key = t.meta_key and
                    t2.meta_value = t.meta_value and
                    t2.id < t.id
             );

答案 1 :(得分:1)

您需要在此处使用 MAX()聚合函数,以获得所需的输出。

您继续使用&#39;术语&#39; NON MIN(id) - 现在让我们感到很困惑。这意味着,您需要所有不是 MIN(id)的ID,其中meta_key =&#39; import_id&#39;。如果是这样,您的输出应该与此类似:

 | id |
 +----+
 | 2  | 
 | 3  |
 | 4  | 
 | 5  | 
 +----+

但如果您需要在问题中进行演示,则需要返回以下结果:

 | id |
 +----+
 | 2  | 
 | 3  | 
 | 6  | 
 +----+

然后你必须使用 MAX()功能。

所以你的查询应该是这样的:

 SELECT MAX(id)
 FROM TABLE 
 WHERE meta_key='import_id'
 GROUP BY meta_value
 HAVING Count(meta_value) > 1

或者如果您想要返回所有列的结果,请尝试以下操作:

 SELECT DISTINCT MAX(id), meta_key, meta_value
 FROM TABLE 
 WHERE meta_key='import_id'
 GROUP BY meta_value
 HAVING Count(meta_value) > 1

在这种情况下,您需要使用 SELECT DISTINCT

答案 2 :(得分:0)

SELECT MAX(id), meta_value, COUNT(*) AS DUPS
FROM TABLE 
WHERE meta_key='import_id'
GROUP BY meta_value
HAVING DUPS > 1;