Переключить регистр в предложении where oracle

У меня есть сценарий ниже. Не могли бы вы исправить приведенный ниже запрос ..

 where l.au=m.acad_group

 and l.acad_prog = m.acad_prog

 case when acad_plan is not null then and l.acad_plan = m.acad_plan else and 0=0 
 end case

case when l.acad_sub_plan is not null then and l.acad_sub_plan=m.acad_sub_plan 
else and 0=0 end case;

Условия JOIN должны быть в пункте ON, а не в пункте WHERE. Научитесь использовать правильный синтаксис JOIN.

Gordon Linoff 02.05.2018 02:38

Я удалил тег PL / SQL. PL / SQL - это язык программирования в СУБД Oracle, используемый для триггеров, функций и т. д., Но ваш запрос основан только на SQL.

Thorsten Kettner 02.05.2018 07:24
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
906
2

Ответы 2

Если я правильно понимаю, вы можете использовать OR и AND вместо CASE WHEN

вы можете попробовать это.

У меня небольшой вопрос по acad_plan is null, какой acad_plan вы хотите проверить, l.acad_plan или m.acad_plan?

where l.au=m.acad_group 
AND l.acad_prog = m.acad_prog
AND (acad_plan is null  OR( acad_plan is not null AND l.acad_plan = m.acad_plan))
AND (l.acad_sub_plan is null  OR( l.acad_sub_plan  is not null AND l.acad_sub_plan=m.acad_sub_plan))

Не используйте CASE WHEN в предложении WHERE. Используйте AND и OR и круглые скобки.

where l.au = m.acad_group
  and l.acad_prog = m.acad_prog
  and (and l.acad_plan = m.acad_plan or l.acad_plan is null)
  and (and l.acad_sub_plan = m.acad_sub_plan or l.acad_sub_plan is null)

Существуют допустимые варианты использования CASE в предложении WHERE, особенно для того, чтобы заставить Oracle запускать один предикат перед другим (например, проверьте, что строка содержит только цифры, прежде чем выполнять для нее TO_NUMBER)

Gary Myers 02.05.2018 04:02

@Gary Myers: Это правда, хотя я бы предпочел написать безопасную функцию для такого случая. Для конкретного случая TO_NUMBER мы даже можем использовать опцию ON DEFAULT в Oracle 12c.

Thorsten Kettner 02.05.2018 07:39

Другие вопросы по теме