子查询返回值的用例

时间:2019-03-13 11:50:11

标签: sql oracle oracle11g

我想编写case子句,该子句的输入来自内部查询。请让我详细描述一下。

说我有一张桌子:

create table food
(   fruit varchar2(50),
    chips varchar2(50)
);

带有值

INSERT INTO food
(fruit, chips)
VALUES ('Apple', 'Paprika');

INSERT INTO food
(fruit, chips)
VALUES ('Orange', 'Salt');

DB Fiddle

我想写一个查询,显示以下内容:

水果,薯条和1个(如果水果是“ Apple”),否则为0

这将给出结果(示例)

'Apple', 'Paprika', 1
'Orange, 'Salt', 0

我不想为此使用联接。 它必须是子查询。这是我必须遵守的要求。

我提出了以下查询:

select f.fruit,
((case (select ff.fruit from food ff)
when ff.fruit = 'Apple' then 1 else 0 end ) as is_apple) from food f;

但是,出现以下错误ORA-00905: missing keyword

2 个答案:

答案 0 :(得分:4)

您不需要子查询:

select fruit, chips,
       case when fruit = 'Apple'
         then 1
         else 0
       end as is_apple
from food

如果该值必须是子查询的结果,则可以使用:

select fruit, chips,
       (select case when f2.fruit = 'Apple'
                 then 1
                 else 0
               end
        from food f2
        where f.rowid = f2.rowid
        )
from food f

答案 1 :(得分:0)

如果必须是子查询,则使用dual

select fruit, chips, 
      (select case food.fruit when 'Apple' then 1 else 0 end from dual) is_apple 
  from food;

或使用主键(如果您的表包含它)从food进行子选择,或rowid

select fruit, chips, 
      case (select fruit from food ff where ff.rowid = food.rowid) 
          when 'Apple' then 1 
          else 0 
      end is_apple 
  from food;

demo