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

MySQL查询未返回预期结果:筛选满足特定条件的Token

问题排查与解决

原查询的问题

原查询逻辑存在矛盾:一条TableB记录只能有一个Key值,不可能同时满足b.key = 'Method'和b.key in ('App', 'Manual', 'Stored')这两个互斥条件,因此这个查询永远返回空结果。


正确解法

解法1:分组聚合判断(扩展性好)

通过分组统计符合条件的记录数,确保Token同时满足所有要求:

SELECT a.Token
FROM TableA a
JOIN TableB b ON b.TableA_Token = a.Token
GROUP BY a.Token
HAVING 
    -- 验证存在Method=Virtual的记录
    SUM(CASE WHEN b.`Key` = 'Method' AND b.Value = 'Virtual' THEN 1 ELSE 0 END) > 0
    -- 验证App、Manual、Stored的Value全为N(即没有非N的记录)
    AND SUM(CASE WHEN b.`Key` IN ('App', 'Manual', 'Stored') AND b.Value != 'N' THEN 1 ELSE 0 END) = 0;

解法2:多EXISTS子查询(逻辑直观)

通过多个存在性判断,逐一验证每个Key的条件:

SELECT a.Token
FROM TableA a
WHERE
    EXISTS (
        SELECT 1 FROM TableB b 
        WHERE b.TableA_Token = a.Token 
          AND b.`Key` = 'Method' 
          AND b.Value = 'Virtual'
    )
    AND EXISTS (
        SELECT 1 FROM TableB b 
        WHERE b.TableA_Token = a.Token 
          AND b.`Key` = 'App' 
          AND b.Value = 'N'
    )
    AND EXISTS (
        SELECT 1 FROM TableB b 
        WHERE b.TableA_Token = a.Token 
          AND b.`Key` = 'Manual' 
          AND b.Value = 'N'
    )
    AND EXISTS (
        SELECT 1 FROM TableB b 
        WHERE b.TableA_Token = a.Token 
          AND b.`Key` = 'Stored' 
          AND b.Value = 'N'
    );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:58:23