Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql-“;“在空数组中”;语法_Postgresql - Fatal编程技术网

Postgresql-“;“在空数组中”;语法

Postgresql-“;“在空数组中”;语法,postgresql,Postgresql,我以编程方式向Postgresql创建sql查询,如下所示: SELECT * FROM table WHERE column IN (1, 2, 3); SELECT * FROM table WHERE column IN (1); SELECT * FROM table WHERE column IN (); 最后一个查询生成语法错误。如何处理这种特殊情况并在此处写入空数组?使用不返回结果的子查询: select null where 0 = 1 此处的null也应该可以隐式转换为任何

我以编程方式向Postgresql创建sql查询,如下所示:

SELECT * FROM table WHERE column IN (1, 2, 3);
SELECT * FROM table WHERE column IN (1);
SELECT * FROM table WHERE column IN ();

最后一个查询生成语法错误。如何处理这种特殊情况并在此处写入空数组?

使用不返回结果的子查询:

select null where 0 = 1
此处的
null
也应该可以隐式转换为任何类型。唯一重要的是,查询不返回任何结果。对于您的情况,使用
选择0
或其他一些整数(如果您觉得更清楚的话)同样有效

虽然可以在列表中插入一个literal
null
值,但我不建议这样做。有些平台的服务器设置允许空相等测试。我怀疑优化器会更好地处理子查询表单。如果不从dual添加
,这在Oracle上是行不通的,但它通常也是可移植的。

在内部

col IN (1, 2, 3)
转换为

col = ANY (ARRAY[1,2,3]::integer[])
该语法也适用于空数组:

col = ANY (ARRAY[]::integer[])