在我正在设计的数据库模型中,有一个表,其中包含包含公式的文本字段。 该公式代表一系列复合运算。
以下是该公式的几个示例:
程序中的函数负责将该公式转换为有效的查询
问题:如何在完整查询中处理这些括号优先级?因为选择查询周围的括号仅在某些特定情况下有效,这不是我当前的情况。
让我们采用以下公式作为翻译函数的参数:
(1i2)e(3i4)
预格式化的查询如下所示:
select pic_id
from pictags
where tag_id = ?
问号被数字取代
这是通话和返回的短信
>>> translate("(1i2)e(3i4)")
... (
... select pic_id
... from pictags
... where tag_id = 1
...
... intersect
...
... select pic_id
... from pictags
... where tag_id = 2
... )
...
... except
...
... (
... select pic_id
... from pictags
... where tag_id = 3
...
... intersect
...
... select pic_id
... from pictags
... where tag_id = 4
... )
如您所见,返回文本中的括号作为 sql 查询无效。虽然我可以用
intersect
替换 AND pic_id IN ([select statement])
,也可以用 except
替换 AND [expr] NOT IN ([select statement])
,但它确实使函数变得复杂,这是非常不优雅的。
肯定存在更好的方法来解决这些优先事项,不是吗?
如果在公式的
SELECT pic_id from
之前添加 (
,它将生成一组可以进行 UNIONed、INTERSECTed 和/或 EXCEPTed 的结果行。