Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
Sql 在where子句中使用decode_Sql_Oracle_Plsqldeveloper - Fatal编程技术网

Sql 在where子句中使用decode

Sql 在where子句中使用decode,sql,oracle,plsqldeveloper,Sql,Oracle,Plsqldeveloper,我的WHERE子句中有一个DECODE,如下所示: Where id = decode('&flag','Yes',(Select id from tab where id > 10),0) 如果子查询返回一篇文章,则此代码有效。如果我返回多行,我会得到一个错误,如ORA-01427,“单行子查询返回多行” 我尝试将“=”更改为“in”,但仍然出现相同的错误 有什么想法吗 扩展示例: WHERE Dop_id = (DECODE ('&prep_flag', 'Yes',

我的
WHERE
子句中有一个
DECODE
,如下所示:

Where id = decode('&flag','Yes',(Select id from tab where id > 10),0)
如果子查询返回一篇文章,则此代码有效。如果我返回多行,我会得到一个错误,如ORA-01427,“单行子查询返回多行”

我尝试将“=”更改为“in”,但仍然出现相同的错误

有什么想法吗

扩展示例:

WHERE Dop_id = (DECODE ('&prep_flag', 'Yes', 
    (SELECT Dop_id FROM 
                   ( SELECT DOP_id, name FROM TABLE)
                    WHERE name IS NOT NULL) 
 , Dop_id))

如前所述,如果select statmen返回第行,而不是几行,则此操作有效。

假设decode只需要一个值,其中您有
select id from选项卡,其中id>10
我会尝试将select移到decode之外:

WHERE id IN (
    SELECT decode('&flag', 'Yes', id, 0)
    FROM tab
    WHERE id > 10
)

使用
=
中的
时,这是不可能的,因为
DECODE()
不能将集合作为单个结果返回。您必须更改设计,或使用
SELECT MAX(id)…
将设置限制为单个结果。我明白为什么我应该按照您建议的方式进行设置。但我想用whare条款的解码。如果标志是Yes,那么我需要列名不为null的所有id。我在Case子句中添加了一个END。但是我得到了和以前一样的错误。ORA-01427(单行子查询返回多行)
WHERE Dop_id IN 
      ( CASE &flag
        WHEN 'Yes'
        THEN (SELECT Dop_id 
                FROM TABLE
               WHERE name IS NOT NULL)
        ELSE Dop_id);