mysql - 在MySQL中使用分区选择重复?
问题描述
我想从表中选择所有重复项:
SELECT * FROM people HAVING (count(*) OVER (PARTITION BY name)) > 1;
不幸的是我得到了错误:
Error Code: 3593. You cannot use the window function 'count' in this context.
一种不太优雅的解决方案是:
SELECT
*
FROM
people
WHERE
code IN (SELECT
name
FROM
people
GROUP BY name
HAVING COUNT(*) > 1);
如何重写我的第一个查询以使其工作?
解决方案
如果code
相同,则可以使用exists
:
select p.*
from people p
where exists (select 1 from people p1 where p1.name = p.name and p.code <> p1.code);
如果整个表没有任何标识列,则如果code
列没有标识功能,则使用标识列,那么您的方法适用于以下更新的查询:
SELECT p.*
FROM people p
WHERE name IN (SELECT name FROM people GROUP BY name HAVING COUNT(*) > 1);
推荐阅读
- python - 如何解决IndexError:列表索引超出范围
- sql - 选择带有 where 子句和列名的查询应该出现在右侧
- javascript - 将现有元素注入 React
- intellij-idea - 如何手动执行 CustomSqlChange
- python - TensorFlow 使用不可见的 GPU
- angular - 角度服务中的 Auth0 不记名令牌
- java - 如何将对象转换为给定的泛型类型,以便我可以将此对象传递给方法
- amazon-web-services - 用于 IOT 设备影子的 AWS Appsync Http 解析器
- android - Flutter:如何修复“像素溢出的 RenderFlex”错误?
- docker - 我们可以在 Jenkinsfile 的私有 Docker 注册表中创建新的 docker 存储库吗?