为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕少森 2022-08-15 15:34:48
我正在使用带有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任何更简单的方法?
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

除了从可用列列表中构造SQL字符串之外,没有办法做你想做的事情,可以通过查询来获取。information_schema.columns

SQL 语句在执行之前进行分析,并且没有条件编译或短路,因此如果引用了不存在的列,则会出现错误。


查看完整回答
反对 回复 2022-08-15
?
holdtom

TA贡献1805条经验 获得超10个赞

为什么不先获得表中列的列表?喜欢这个


select column_name 

from information_schema.columns 

where table_name = 'table_name' and (column_name = 'size' or column_name = 'length');

结果将是存在的列。


查看完整回答
反对 回复 2022-08-15
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我会尝试首先检查信息架构

“从INFORMATION_SCHEMA中选择column_name。table_name ='table_name';”

然后根据结果做查询


查看完整回答
反对 回复 2022-08-15
  • 3 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号