我有一个包含多个重复记录的表。该表有4列,例如id
、post_id
、post_key
和post_value
。我能够返回与下面的查询重复的条目。
SELECT *
FROM table1 ppm
WHERE ppm.post_key = 'some_value'
AND ppm.post_id IN (SELECT pm.post_id
FROM table1 pm
WHERE pm.post_key = 'some_value'
GROUP BY pm.post_id
HAVING COUNT(pm.post_id) > 1)
它会生成如下输出:
| id| post_id|柱键|后值|
| - -----|- -----|- -----|- -----|
| 1| 2| key1|价值1|
| 2| 2| key1|价值观2|
| 3| 2| key1|价值3|
因为可能存在多个重复的post_id
,例如2
,我想只显示较低的id
值。使用上面的例子,它只会显示下面的结果,因为3
是比前面的值更大的数字。
| id| post_id|柱键|后值|
| - -----|- -----|- -----|- -----|
| 1| 2| key1|价值1|
| 2| 2| key1|价值观2|
如何返回具有较低id
的重复行?
当前查询返回所有重复行。我希望只有id
值较低的重复行。
2条答案
按热度按时间sxpgvts31#
使用自联接来检查在ON条件下ID是否更低。
我添加了
DISTINCT
,以防有多个副本,这将只返回每对中的一个。du7egjpx2#
看它在这里工作:
https://dbfiddle.uk/QZf1xFN8