PostgreSQL,允许按不存在的字段进行过滤

我正在使用带有Go驱动程序的PostgreSQL。有时我需要查询不存在的字段,只是为了检查 - 也许数据库中存在某些内容。在查询之前,我无法判断该字段是否存在。例:

where size=10 or length=10

默认情况下,我收到一个错误,但是,该列可能存在,我可以得到一些结果。column "length" does not existsize

是否有可能处理此类情况以返回可能的内容?


编辑:

是的,我可以先获取所有现有列。但是初始查询可能相当复杂,不是由我直接创建的,我只能修改它们。

这意味着查询可以像前面的示例一样简单,也可以像下面这样复杂得多:

WHERE size=10 OR (length=10 AND n='example') OR (c BETWEEN 1 and 5 AND p='Mars')

如果缺少列和 - 这是否意味着我必须解析SQL,按(或其他运算符)拆分它,检查查询的每个部分,然后删除任何缺少列的部分 - 最后生成新的SQL查询?lengthcOR

任何更简单的方法?


慕少森
浏览 139回答 3
3回答

守着星空守着你

除了从可用列列表中构造SQL字符串之外,没有办法做你想做的事情,可以通过查询来获取。information_schema.columnsSQL 语句在执行之前进行分析,并且没有条件编译或短路,因此如果引用了不存在的列,则会出现错误。

holdtom

为什么不先获得表中列的列表?喜欢这个select column_name from information_schema.columns where table_name = 'table_name' and (column_name = 'size' or column_name = 'length');结果将是存在的列。

汪汪一只猫

我会尝试首先检查信息架构“从INFORMATION_SCHEMA中选择column_name。table_name ='table_name';”然后根据结果做查询
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go