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

SQLite如何查询满足特定条件的ID列表?

看起来你是想拿到符合特定条件的ID列表,但原查询可能没达到你预期的效果——我来帮你拆解问题,给出对应的解决方案:

首先得明确你的核心需求,因为不同需求的解决方式差异很大:

需求1:只要ID有至少一行符合条件,就列出这个ID(允许ID存在其他不符合条件的行)

你的原查询会返回所有满足(key != 60) OR (key = 60 AND value = 8)的行,但如果要得到唯一的ID列表,只需要加上DISTINCT关键字去重即可:

SELECT DISTINCT id 
FROM items_attributes 
WHERE (key != 60) OR (key = 60 AND value = 8);

这个查询会把所有存在符合条件行的ID列出来,每个ID仅出现一次。

需求2:ID的所有行都符合条件(排除存在key=60且value≠8行的ID)

如果你的真实需求是:某个ID下的每一行都必须满足条件——也就是说,只要ID有一行是key=60且value≠8,就直接排除这个ID,那原查询就不合适了(它会把该ID的其他符合条件的行也查出来,导致ID被误包含)。

这种情况可以用两种方法实现:

方法一:分组统计过滤

通过GROUP BY对ID分组,统计不符合条件的行数,只要行数为0,说明该ID的所有行都符合要求:

SELECT id 
FROM items_attributes 
GROUP BY id 
HAVING SUM(CASE WHEN key = 60 AND value != 8 THEN 1 ELSE 0 END) = 0;

方法二:用NOT EXISTS子查询

直接筛选出不存在key=60且value≠8行的ID,逻辑更直观:

SELECT DISTINCT id 
FROM items_attributes ia
WHERE NOT EXISTS (
    SELECT 1 
    FROM items_attributes 
    WHERE id = ia.id 
      AND key = 60 
      AND value != 8
);

用你的测试数据验证的话,这两个查询会返回244574、218965、218966三个ID,排除掉存在不符合条件行的214808和214809,这也是大多数场景下的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:18:13