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

SQLite中如何查询包含全表唯一值的行?

解决SQLite中筛选包含全局唯一值的行问题

你的需求是找出原表中至少包含一个在col_A和col_B两列中总共仅出现一次的值的行,下面是兼容SQLite的解决方案:

正确SQL语句

SELECT t.*
FROM my_table t
WHERE EXISTS (
    -- 统计所有值的全局出现次数,筛选仅出现一次的值
    SELECT 1
    FROM (
        SELECT col_A AS val FROM my_table
        UNION ALL
        SELECT col_B AS val FROM my_table
    ) AS all_vals
    GROUP BY val
    HAVING COUNT(*) = 1
    AND val IN (t.col_A, t.col_B)
);

逻辑解释

  1. 合并两列数据:用UNION ALL把col_A和col_B的所有值合并成一个完整列表(保留重复项,保证计数准确)。
  2. 筛选全局唯一值:对合并后的列表按值分组,通过COUNT(*) = 1找出在两列中总共只出现一次的值。
  3. 匹配目标行:外层查询通过EXISTS判断当前行的col_A或col_B是否属于这些全局唯一值,符合条件的行即为结果。

验证结果

用你提供的示例数据测试,该语句会返回预期结果:

col_Acol_B
444333
222555
333666

原语句失效原因

  1. UNION的误用:你用UNION合并单列唯一值,会丢失重复计数,无法统计值在两列中的总出现次数,导致错误包含全局重复的值。
  2. 语法错误:(子查询) IN (col_A, col_B)不符合SQLite语法,即使调整为col_A IN (子查询) OR col_B IN (子查询),也因为第一个问题无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:31:09