Проблема с запросом

ALTER TABLE "public"."items" 
ADD CHECK CASE WHEN ((type)::text = 'WEAPON'::text)
THEN ((((((slot_type)::text = 'PRIM'::text)
  OR ((slot_type)::text = 'SUB'::text))
  OR ((slot_type)::text = 'MELEE'::text))
  OR ((slot_type)::text = 'THROWING'::text))
  OR ((slot_type)::text = 'ITEM'::text))
ELSE CASE WHEN ((type)::text = 'CHARACTER'::text)
THEN ((((((slot_type)::text = 'CHAR_RED'::text)
  OR ((slot_type)::text = 'CHAR_BLUE'::text))
  OR ((slot_type)::text = 'CHAR_HEAD'::text))
  OR ((slot_type)::text = 'CHAR_ITEM'::text))
  OR ((slot_type)::text = 'CHAR_DINO'::text))
ELSE true END
END;

Ищу помощи. В чем может быть проблема? пишет: ошибка синтаксиса неверное положение "CASE"

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Документация: CASE WHEN

Документация:

CASE WHEN condition THEN result
     [WHEN ...]
     [ELSE result]
END

А у тебя "...ELSE CASE WHEN...".
"CASE" и "ELSE" один раз д.б. объявлен.
Делаю без проверки:

ALTER TABLE "public"."items" 
ADD CHECK CASE WHEN ((type)::text = 'WEAPON'::text)
THEN ((((((slot_type)::text = 'PRIM'::text)
  OR ((slot_type)::text = 'SUB'::text))
  OR ((slot_type)::text = 'MELEE'::text))
  OR ((slot_type)::text = 'THROWING'::text))
  OR ((slot_type)::text = 'ITEM'::text))
WHEN ((type)::text = 'CHARACTER'::text)
THEN ((((((slot_type)::text = 'CHAR_RED'::text)
  OR ((slot_type)::text = 'CHAR_BLUE'::text))
  OR ((slot_type)::text = 'CHAR_HEAD'::text))
  OR ((slot_type)::text = 'CHAR_ITEM'::text))
  OR ((slot_type)::text = 'CHAR_DINO'::text))
ELSE true END;

Можешь дать свой скайп или вк

Можешь дать свой скайп или вк для связи?

И еще у меня тут проблема

Не верно тоже самое

ALTER TABLE "public"."items" 
ADD CHECK CASE WHEN ((type)::text = 'WEAPON'::text)
THEN ((((((slot_type)::text = 'PRIM'::text)
  OR ((slot_type)::text = 'SUB'::text))
  OR ((slot_type)::text = 'MELEE'::text))
  OR ((slot_type)::text = 'THROWING'::text))
  OR ((slot_type)::text = 'ITEM'::text))
WHEN ((type)::text = 'CHARACTER'::text)
THEN ((((((slot_type)::text = 'CHAR_RED'::text)
  OR ((slot_type)::text = 'CHAR_BLUE'::text))
  OR ((slot_type)::text = 'CHAR_HEAD'::text))
  OR ((slot_type)::text = 'CHAR_ITEM'::text))
  OR ((slot_type)::text = 'CHAR_DINO'::text))
ELSE true END;

Я думаю что в запросе еще много проблем. По этому нужна твоя помощь.

По ходу CASE здесь вообще не

По ходу CASE здесь вообще не нужен.

ADD CHECK (type = 'WEAPON' AND slot_type IN ('PRIM', 'SUB', ...)) 
       OR (type = 'CHARACTER' AND slot_type IN ('CHAR_RED', 'CHAR_BLUE', ...))

Вместо многоточий продолжи перечисление

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023