Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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函数case语句中的子查询返回多行_Sql_Postgresql_Postgresql 9.1_Case When - Fatal编程技术网

PostgreSQL函数case语句中的子查询返回多行

PostgreSQL函数case语句中的子查询返回多行,sql,postgresql,postgresql-9.1,case-when,Sql,Postgresql,Postgresql 9.1,Case When,因此,我编写了一个postgreSQL函数,该函数应该基于大量可选输入参数对表进行搜索,我用许多AND语句对这些参数进行分组。然而,这一点: AND ( (newcheck IS NULL) OR ( newcheck IS NOT NULL AND product.id IN( CASE WHEN newcheck='New' THEN (SELECT product.id FROM product WHERE produ

因此,我编写了一个postgreSQL函数,该函数应该基于大量可选输入参数对表进行搜索,我用许多AND语句对这些参数进行分组。然而,这一点:

AND
(
 (newcheck IS NULL) 
    OR
    ( 
    newcheck IS NOT NULL AND product.id IN(
    CASE WHEN newcheck='New' 
        THEN
        (SELECT product.id FROM product WHERE product.anew IS true)
    ELSE
        (SELECT product.id from product WHERE product.anew IS false)
    END)
    )
)
给我一个

ERROR:  more than one row returned by a subquery used as an expression
这并没有多大帮助,因为我确实希望它返回远不止一行。 newcheck变量的值将从web表单中的下拉菜单发送,因此它只能是“新”或“旧”。 你知道是什么导致了这个问题吗

试试以下方法:

AND ((newcheck IS NULL)
     OR (newcheck IS NOT NULL 
         AND product.id IN (SELECT product.id 
                            FROM product 
                            WHERE product.anew = CASE WHEN newcheck='New' 
                                                      THEN true 
                                                      ELSE false
                                                 END))

问题是,每个subselect都返回多行,
CASE
语句期望每个分支都有一个结果。好吧,当我将newcheck设置为除“New”之外的任何值时,这似乎都能很好地工作。如果它是“新的”,我只得到一行作为结果。。。