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

SQLite单次查询获取多组符合不同条件的唯一不重复行咨询

实现方案

该需求可通过单次SQLite查询实现,无需拆分查询加额外过滤逻辑。

核心实现思路

利用UNION ALL将不同词类的候选池合并,配合随机排序和去重逻辑,即可一次性返回指定数量、互不重复且满足对应词类非空条件的结果。

示例SQL(以查询degree、adjective、object三类词为例)

WITH typed_candidates AS (
    -- 每个UNION ALL块对应一类需要查询的词
    SELECT 'degree' AS type, word, degree AS rule_id, random() AS priority FROM wordLibrary WHERE degree IS NOT NULL
    UNION ALL
    SELECT 'adjective' AS type, word, adjective AS rule_id, random() AS priority FROM wordLibrary WHERE adjective IS NOT NULL
    UNION ALL
    SELECT 'object' AS type, word, object AS rule_id, random() AS priority FROM wordLibrary WHERE object IS NOT NULL
),
ranked AS (
    -- 按优先级排序,同时给重复单词打标记,保证同一个单词只被选中一次
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY word ORDER BY priority) AS word_rn,
           ROW_NUMBER() OVER (PARTITION BY type ORDER BY priority) AS type_rn
    FROM typed_candidates
)
SELECT type, word, rule_id
FROM ranked
WHERE word_rn = 1 -- 过滤掉重复出现的单词
  AND type_rn = 1 -- 每个词类取优先级最高的1个
ORDER BY type;

方案说明

  • 动态适配:如果需要查询的词类列表是动态的,只需在Python侧根据输入的列名列表,动态生成对应UNION ALL的子句即可,无需修改固定逻辑
  • 性能优势:相比拆分多次查询+已选词过滤的方案,单次查询仅需扫一次表,避免多次IO开销,同时天然避免了多次查询时词库余量不足的问题
  • 结果保证:返回行数和你输入的词类数量完全一致,每个单词只会被分配到一个词类,不会出现重复选词问题

备选方案(不推荐)

如果你不想维护动态SQL,也可以在原有单类查询的基础上增加已选词过滤,每次查询补充WHERE word NOT IN ('已选词1', '已选词2')的条件,该方案实现简单但性能更低,词库较小时可能出现无符合条件结果的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 23:33:00