如何筛选无tokenRefNameID=4关联的tokenID?SQL查询求助
解决方案
有几种常用方法可以实现你要筛选完全未关联tokenRefNameID=4的tokenID的需求,以下是具体实现:
方法1:NOT EXISTS子查询
直接排除所有存在tokenRefNameID=4记录的tokenID,逻辑清晰且性能较好:
SELECT DISTINCT tokenID FROM tokenRefs t1 WHERE NOT EXISTS ( SELECT 1 FROM tokenRefs t2 WHERE t2.tokenID = t1.tokenID AND t2.tokenRefNameID = 4 )
方法2:GROUP BY + HAVING统计
通过分组后统计关联tokenRefNameID=4的次数,筛选次数为0的tokenID:
SELECT tokenID FROM tokenRefs GROUP BY tokenID HAVING SUM(CASE WHEN tokenRefNameID = 4 THEN 1 ELSE 0 END) = 0
方法3:NOT IN子查询
这种写法简洁,但需注意如果tokenID存在NULL值时可能出现异常:
SELECT DISTINCT tokenID FROM tokenRefs WHERE tokenID NOT IN ( SELECT tokenID FROM tokenRefs WHERE tokenRefNameID = 4 )
针对你的示例数据验证
你的示例数据:
| tokenID | tokenRefNameID |
|---|---|
| 1 | 4 |
| 2 | 4 |
| 1 | 2 |
使用以上任意SQL,结果都会是空集——因为所有存在的tokenID(1和2)都关联过tokenRefNameID=4。如果新增一条tokenID=3、tokenRefNameID=5的记录,查询结果会返回3。
内容的提问来源于stack exchange,提问作者Jaden16538294
相关产品推荐
相关产品推荐

