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

网页过滤器SQL查询问题:筛选拥有指定属性且isPresent=1的书籍

书籍属性过滤的SQL查询解决方案

你的核心需求是:筛选出**至少拥有Attr1或Attr2其中一个属性(对应isPresent=1)**的书籍(即示例中的Book1、Book3),排除Book2这类两个目标属性都不满足的情况。下面是几种可行的实现方式:

方法1:GROUP BY + HAVING 聚合筛选

SELECT book
FROM books
WHERE attr IN ('Attr1', 'Attr2')
GROUP BY book
HAVING SUM(isPresent) > 0;
  • 逻辑:先过滤出仅包含Attr1和Attr2的记录,按书籍分组后,SUM(isPresent)大于0说明该书籍至少有一个目标属性的isPresent为1,符合筛选条件。

方法2:EXISTS 子查询验证

SELECT DISTINCT book
FROM books b
WHERE EXISTS (
    SELECT 1
    FROM books
    WHERE book = b.book
      AND attr IN ('Attr1', 'Attr2')
      AND isPresent = 1
);
  • 逻辑:遍历每本书,通过子查询检查该书籍是否存在一条Attr1/Attr2且isPresent=1的记录,存在则保留;DISTINCT确保结果中书籍名称不重复。

方法3:IN 子查询匹配

SELECT DISTINCT book
FROM books
WHERE book IN (
    SELECT book
    FROM books
    WHERE attr IN ('Attr1', 'Attr2')
      AND isPresent = 1
);
  • 逻辑:子查询先得到所有满足“Attr1/Attr2且isPresent=1”的书籍列表,外层查询返回这些书籍的去重结果。

关于原查询的问题

你提供的原查询SELECT * FROM books WHERE isPresent = 1 && attr IN (Attr1, Attr2)本身不会返回Book2的记录(Book2的Attr1和Attr2的isPresent均为0),但它返回的是符合条件的行记录而非去重后的书籍列表。如果你的目标是获取书籍名称列表,需要调整逻辑确保只保留至少有一个目标属性满足条件的书籍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:00:11