我有一个类似的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)值
答案 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;