看起来我们的偏好表中可能有一些重复的值 所以我想删除每个用户的所有重复条目,但最近的一个 .我花了很长时间试图想出一个解决方案,但我一直在兜兜转转。我试过最大、分组依据、子查询等。删除最高的很容易,但不是除最高之外的所有内容。尤其是对于每个用户
所以在数据库中我可能有:
id : name: value : userId
1 : sortOrder: Asc : 1
2 : sortOrder: Desc : 1
3 : sortOrder: Asc : 2
4 : something: value2 : 1
所以在这种情况下,我想删除第一行,因为它对于用户 1 来说是重复的并且具有最高的 id 并保留所有其余的列。
所以我知道它至少是一个带有 group by 的子查询,但我就是想不通。到目前为止,我有:
SELECT
MAX(id),
name
FROM
preference
GROUP BY
name
这给了我一个我想保留的列表,但是 它仍然错过了每个用户。所以如果我为每个用户都有它,我有点想要相反的东西。但是我不相信我可以在子查询中使用 <> 。
我最终想要做的是说删除所有重复条目的同一用户的 ID 较低的所有用户。
最佳答案
一种方式,假设 Id
column 是一个唯一的 ID:
DELETE FROM preference
where Id NOT IN (SELECT MAX(id) FROM preference GROUP BY name, userId)
[注意:通常的建议适用。 不要无需先测试即可在生产中运行]
首先测试:
SELECT * FROM preference
where Id NOT IN (SELECT MAX(id) FROM preference GROUP BY name, userId)
SQLFiddle 是 here .按预期工作。我建议使用更大的数据集进行测试...
关于SQL - 删除所有重复项,但每个用户 ID 的每个组中最高的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16247538/