Использование регистра при возвращении значения подзапроса - PullRequest
0 голосов
/ 13 марта 2019

Я хотел бы написать предложение 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 ]

4 голосов
/ 13 марта 2019

Для этого вам не нужен подзапрос:

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
0 голосов
/ 13 марта 2019

Если , это должен быть подзапрос , тогда используйте 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;

демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...