postgresql - PostgreSQL,允许过滤不存在的字段
问题描述
我正在使用带有 Go 驱动程序的 PostgreSQL。有时我需要查询不存在的字段,只是为了检查 - 也许数据库中存在某些东西。在查询之前,我无法判断该字段是否存在。例子:
where size=10 or length=10
默认情况下,我得到一个错误column "length" does not exist
,但是,该size
列可能存在并且我可以获得一些结果。
是否可以处理此类情况以返回可能的情况?
编辑:
是的,我可以先得到所有现有的列。但最初的查询可能相当复杂,不是我直接创建的,我只能修改它们。
这意味着查询可以像前面的示例一样简单,也可以像这样复杂得多:
WHERE size=10 OR (length=10 AND n='example') OR (c BETWEEN 1 and 5 AND p='Mars')
如果缺少的列是length
并且c
- 这是否意味着我必须解析 SQL,将其拆分OR
(或其他运算符),检查查询的每个部分,然后删除缺少列的任何部分 - 最后生成一个新的 SQL 查询?
有更简单的方法吗?
解决方案
没有办法做你想做的事,除了从可用列的列表中构造一个 SQL 字符串,可以通过查询information_schema.columns
.
SQL 语句在执行之前先解析,没有条件编译或短路,因此如果引用了不存在的列,则会出错。
推荐阅读
- sass - 如何在 Sass 中混合使用 @each?
- java - springboot应用中tomcat配置sendReasonPhrase = true在哪里设置
- laravel-5 - 如何在 Laravel 5.7 中安装类似 Wordpress 的编辑器?
- php - 用php解密ssl加密的pcap文件
- python-3.x - 如何使用while和for循环以相反的顺序(从最后一项到第一项)打印列表
- delphi - 使用 Delphi 进行动态转换以访问方法和属性
- python - 有没有办法在散景图中有多个图例颜色文本?
- delphi - 蒙版仅在双击时出现
- javascript - OnChange 未在 setState 上保存写入的输入值
- java - Spring 在测试期间从包私有类获取配置