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

编写SQL SELECT查询:判断城市所有房屋的has_door属性是否全为true

解决思路与SQL实现

嘿,这个需求其实挺常见的,我来给你几个实用的解决方案,分不同场景说明:

1. 查看所有城市的状态(返回每个城市是否所有房源都有门)

如果需要一次性获取所有城市的判定结果,下面两种方法都能搞定:

方法1:分组统计法

SELECT 
    c.city_id,
    c.city_name,
    -- 统计当前城市中has_door为false的房源数量,若为0则返回true
    CASE 
        WHEN COUNT(CASE WHEN h.has_door = false THEN 1 END) = 0 THEN true 
        ELSE false 
    END AS all_houses_have_door
FROM city c
-- 左连接保留没有房源的城市(若不需要这类城市,换成INNER JOIN即可)
LEFT JOIN house h ON c.city_id = h.city_id
GROUP BY c.city_id, c.city_name;

逻辑说明:通过嵌套CASE语句筛选出不符合条件的房源,统计数量为0就意味着所有房源都满足has_door=true。左连接能确保没有房源的城市也会出现在结果里(这类城市会被判定为true,因为不存在不符合条件的房源)。

方法2:NOT EXISTS子查询法(性能更优)

SELECT 
    c.city_id,
    c.city_name,
    -- 子查询检查当前城市是否存在has_door=false的房源,不存在则返回true
    NOT EXISTS (
        SELECT 1 
        FROM house h 
        WHERE h.city_id = c.city_id 
          AND h.has_door = false
    ) AS all_houses_have_door
FROM city c;

逻辑说明:NOT EXISTS会提前终止子查询的执行——只要找到一个has_door=false的房源,就不再继续检查该城市的其他房源,在数据量较大时,这个方法的性能比分组统计法要好很多。

2. 只返回满足条件的城市

如果只需要筛选出所有房源都有门的城市,直接在WHERE中使用NOT EXISTS即可:

SELECT c.city_id, c.city_name
FROM city c
WHERE NOT EXISTS (
    SELECT 1 
    FROM house h 
    WHERE h.city_id = c.city_id 
      AND h.has_door = false
);

3. 检查单个特定城市的状态

如果只需要判断某一个特定城市是否所有房源都有门,简化一下查询就行:

-- 把:target_city_id替换成你要检查的城市ID
SELECT NOT EXISTS (
    SELECT 1 
    FROM house h 
    WHERE h.city_id = :target_city_id 
      AND h.has_door = false
) AS all_houses_have_door;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:57:28