我以编程方式创建对Postgresql的sql查询,如下所示:
SELECT * FROM table WHERE column IN (1, 2, 3);
SELECT * FROM table WHERE column IN (1);
SELECT * FROM table WHERE column IN ();
最后一个查询会生成一个语法错误。我该如何处理这种特殊情况,并在这里写一个空数组呢?
发布于 2020-09-15 23:47:40
在内部,
col IN (1, 2, 3)
被转换为
col = ANY (ARRAY[1,2,3]::integer[])
该语法也适用于空数组:
col = ANY (ARRAY[]::integer[])
发布于 2020-09-15 23:43:01
使用不返回任何结果的子查询:
select null where 0 = 1
这里的null
也应该可以隐式转换为任何类型。重要的是,查询不返回任何结果。对于您的情况,可以使用select 0
或其他整数,如果它们对您来说更清楚的话。
虽然您可以将文字null
值插入到列表中,但我不建议这样做。有些平台的服务器设置允许null相等性测试。我怀疑优化器会更好地处理子查询表单。虽然这不能在不添加from dual
的情况下在Oracle上工作,但它通常也是可移植的。
https://stackoverflow.com/questions/63905200
复制相似问题