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

如何编写SQL查询返回完全不含指定Property_ID的店铺编号

解决方法

原查询的问题在于,它只是排除了Property_ID=113的行,但那些同时拥有其他属性和113的店铺(比如222222),其非113属性的行依然会被选中,导致结果包含这类店铺。以下是几种正确的实现方式:

方法一:使用NOT EXISTS

通过检查店铺不存在Property_ID=113的记录来筛选:

SELECT DISTINCT s.Shop_number
FROM Shops s
WHERE NOT EXISTS (
    SELECT 1
    FROM Properties p
    WHERE p.Shop_number = s.Shop_number
      AND p.Property_ID = 113
);

如果只从Properties表查询,也可以这样写:

SELECT DISTINCT p.Shop_number
FROM Properties p
WHERE NOT EXISTS (
    SELECT 1
    FROM Properties p2
    WHERE p2.Shop_number = p.Shop_number
      AND p2.Property_ID = 113
);

方法二:使用GROUP BY + HAVING

通过分组后筛选不包含113的店铺:

SELECT Shop_number
FROM Properties
GROUP BY Shop_number
HAVING SUM(CASE WHEN Property_ID = 113 THEN 1 ELSE 0 END) = 0;

也可以用MAX简化判断逻辑:

SELECT Shop_number
FROM Properties
GROUP BY Shop_number
HAVING MAX(CASE WHEN Property_ID = 113 THEN 1 ELSE 0 END) = 0;

核心逻辑是:分组后检查该店铺对应的属性组里是否存在113,若不存在则返回该店铺编号。

方法三:使用LEFT JOIN排除

通过左连接后筛选没有匹配到113的记录:

SELECT DISTINCT p.Shop_number
FROM Properties p
LEFT JOIN Properties p2
    ON p.Shop_number = p2.Shop_number
    AND p2.Property_ID = 113
WHERE p2.Shop_number IS NULL;

左连接后,没有113属性的店铺对应的p2字段会是NULL,通过这个条件即可筛选出目标结果。

以上三种方法都能得到期望的结果:仅返回222225和222226。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:50:30