sql - 从三值逻辑到二值逻辑的一般转换
问题描述
我有一个使用OGC Filter Encoding的系统,这是一种类似于 SQL 的通用过滤语言,用于查询各种后端。
当后端恰好是关系型数据库时,将过滤器转换为 SQL 并让它在数据库中运行是很有效的。
但是有一个问题,OGC 过滤器编码具有二值逻辑,而数据库具有三值逻辑,导致某些过滤器返回与在内存中评估不同的结果。
我目前有一个翻译系统可以做“显而易见”的事情,即访问过滤器定义树并在比较中添加空检查,以防过滤器的上层有否定,例如not(a = 1)
变成not(a = 1 and a is not null)
.
我想知道是否有人想出更通用的翻译机制来将 SQL 语句强制转换为二值逻辑行为?
解决方案应该独立于数据库,我的目标是其中的多种(Oracle、SQL Server、PostgreSQL、MySQL、db2、h2、SQLite 等等)。
解决方案
推荐阅读
- sql - SQL Informix 高级查询
- python - 在 Python 中计算某些列依赖于其他列和先前值的表的最有效方法是什么?
- sql - Laravel SQL 关系
- python-3.x - 如何使用层次聚类预测新观察的聚类标签?
- excel - Set Word = GetObject(, "Word.Application") 在一个子中有效,但在同一文档的其他子中无效
- android - 在 Android 应用程序上找不到带有预填充数据库表的 React-Native SQLite
- java - LocalStackContainer 集成测试 lambda
- angular - 使用 Azure DevOps 将我的 Angular Universal (SSR) 上传到 Azure 的问题
- r - R googlesheets4 将令牌作为参数传递给 read_sheet
- docker - 带有烧瓶和postgres的容器之间的通信错误