You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询housenumber与street相同但city不同的重复记录?

解决思路与方案

你的需求是找出所有housenumber和street相同但city不同的记录,之前用INNER JOIN返回数据量过大,是因为这种方式会把同组内的记录两两配对,产生大量重复的关联结果——比如每条Berlin记录会和Paris、Viena的记录各关联一次,每条Paris记录又会和Berlin、Viena的记录关联,导致数据冗余。

这里提供两种高效的解决方案:

方法一:利用分组筛选目标组合

先通过分组找出存在多个不同城市的housenumber+street组合,再查询原表中属于这些组合的所有记录:

SELECT housenumber, street, city
FROM your_table
WHERE (housenumber, street) IN (
    SELECT housenumber, street
    FROM your_table
    GROUP BY housenumber, street
    HAVING COUNT(DISTINCT city) > 1
);

这段SQL的逻辑是:子查询先按housenumber和street分组,统计每组中不同城市的数量,只保留数量大于1的组合;外层查询则从原表中提取这些组合的所有记录,正好符合你的预期结果。

方法二:使用窗口函数(适合支持窗口函数的数据库)

如果你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server等),可以用窗口函数直接统计每组的城市数量,再筛选结果:

SELECT housenumber, street, city
FROM (
    SELECT 
        housenumber, street, city,
        COUNT(DISTINCT city) OVER (PARTITION BY housenumber, street) AS city_count
    FROM your_table
) AS sub
WHERE city_count > 1;

窗口函数PARTITION BY housenumber, street会将数据按门牌号和街道分组,COUNT(DISTINCT city)统计每组内的不同城市数,外层筛选出城市数大于1的记录即可。这种方式性能通常更好,尤其是处理大数据表时。

内容的提问来源于stack exchange,提问作者Zifceac Iaroslav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:05:22