SQLite对比两表筛选记录异常,如何筛选table1匹配table2最新开奖的数字
错误原因
你写的EXISTS子查询没有和外层table1的nums字段建立关联匹配规则,EXISTS关键字的判断逻辑仅为「子查询是否有返回结果」:你用到的子查询永远可以返回1行最新开奖号码的拼接字符串,所以WHERE EXISTS永远为真,返回table1全部记录;对应的NOT EXISTS永远为假,返回空结果。
另外你直接将单个数字类型的nums和拼接后的xx-xx-xx格式字符串做匹配,逻辑本身也不成立。
正确写法
需求1:筛选属于最新开奖号码的记录
写法1:IN子查询匹配(逻辑更直观)
SELECT nums FROM table1 WHERE nums IN ( SELECT n1 FROM (SELECT n1,n2,n3, max(DRAWNUMBER) FROM table2) UNION ALL SELECT n2 FROM (SELECT n1,n2,n3, max(DRAWNUMBER) FROM table2) UNION ALL SELECT n3 FROM (SELECT n1,n2,n3, max(DRAWNUMBER) FROM table2) )
写法2:字符串包含匹配(代码更简洁)
SELECT nums FROM table1 WHERE INSTR( (SELECT n1||'-'||n2||'-'||n3 FROM (SELECT n1,n2,n3, max(DRAWNUMBER) FROM table2)), CAST(nums AS TEXT) ) > 0
需求2:筛选不属于最新开奖号码的记录
仅需要把上述条件反向即可,以字符串匹配写法为例:
SELECT nums FROM table1 WHERE INSTR( (SELECT n1||'-'||n2||'-'||n3 FROM (SELECT n1,n2,n3, max(DRAWNUMBER) FROM table2)), CAST(nums AS TEXT) ) = 0
内容的提问来源于stack exchange,提问作者Juan Perez
相关产品推荐
相关产品推荐

