在分片列上使用 NOT BETWEEN 会被转换为 BETWEEN,并丢弃匹配的行
作者: thswlsqls创建于 2026年9月17日更新于 2026年9月17日
□ 错误报告
你用的是哪个版本的ShardingSphere? 大师 @ 101c3d56ccd
你用的是哪个项目? 硬盘-JDBC还是硬盘-Proxy? 两者
预期行为
在a和b之间不作硬化的栏目 ' 被排除在被硬化的条件之外,因此,查询按其余条件或广播进行,如自32076起的NOT IN ' 。
实际行为
a与b之间没有关系'是指`a与b之间'。 与平等条件相结合,硬化值会相交到一个空集,匹配行则默默缺失.
理由分析(如果可以)
ContitionValueBetweenOperatorGenerator.generate ()'(地貌/硬化/核心',第42-64行)从未读作BetweenExpression.isnot ()'并总是返回Rang.closed(a,b)'。 兄弟姐妹的 " 有条件的操作者Generator " 返回`非() ' (# 32076)的 " 备选.空 " (),但被排除在外。
QQ 复制行为的步骤, 如: SQL 要执行, 硬化规则配置, 当例外发生时等.
- 将 " t-count " 改为 " t-count 0 " 和 " t-count 1 " ,用 " account id% 2 " 表示。
- 插入 " 账户-id = 11 " 一行。
- `从账户中提取的账号为11和账号为1至5;'
预期:从t account 1起的一行。 实际:无行,因为报表被统一为 " t count 0 " 。
· 复制这个问题的示例代码(例如GitHub链接)。 不详
内容来源: apache/shardingsphere