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

SQL多对多关系查询:获取拥有多个所有者的房屋及对应所有者信息

嘿,我来帮你搞定这个SQL查询需求!要找出那些拥有超过1个所有者的房屋,同时返回这些房屋的详细信息以及对应的所有所有者数据,这里有两种实用的方法:

方法一:子查询结合分组筛选

这种方法兼容性很好,几乎所有主流数据库都支持:

SELECT h.ID, h.Name, h.Address, h.Type, o.Name, o.Ocupation, o.Sallary
FROM Homes h
INNER JOIN Owners o ON h.ID = o.ID_home
WHERE h.ID IN (
    -- 先筛选出所有者数量>1的房屋ID
    SELECT ID_home
    FROM Owners
    GROUP BY ID_home
    HAVING COUNT(*) > 1
);

思路拆解:

  • 内层子查询:通过GROUP BY ID_home把所有者按房屋分组,再用HAVING COUNT(*) > 1挑出那些有多个所有者的房屋ID。
  • 外层查询:把Homes和Owners表关联起来,只保留子查询里筛选出来的房屋数据,这样就能拿到这些房屋对应的所有所有者信息了。
方法二:窗口函数实现(更灵活)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),可以用这种更优雅的方式:

WITH home_owner_stats AS (
    SELECT 
        *,
        -- 按房屋分组统计每个房屋的所有者数量
        COUNT(*) OVER (PARTITION BY ID_home) AS total_owners
    FROM Owners
)
SELECT h.ID, h.Name, h.Address, h.Type, o.Name, o.Ocupation, o.Sallary
FROM Homes h
INNER JOIN home_owner_stats o ON h.ID = o.ID_home
WHERE o.total_owners > 1;

思路拆解:

  • 先用CTE创建一个临时数据集,给每条所有者记录加上对应房屋的总所有者数(PARTITION BY ID_home就是按房屋分组统计)。
  • 然后关联Homes表,筛选出总所有者数大于1的记录,直接得到你要的结果。

两种方法最终都会输出你预期的结果:

ID Name Address Type Name Ocupation Sallary
2 home2 Street2 Type2 Jorge Singer 500
2 home2 Street2 Type2 Mike Artist 1000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:52:45