#sql #oracle #plsql
Вопрос:
Почему в этом запросе я получаю два результата, используя регистр? Я думал, что после выполнения первого условия следует перерыв, а второе вообще не проверяется
select KOD from ap_magazyny mag where 1 =
case
when (value1 like 'ZZ%' and mag.KOD like (select SUBSTR(value1,INSTR(value1,'/',1) 1,3) from dual)) then 1
when (atrybut_t01 = value2 AND rownum = 1) then 1
else 0
end
Комментарии:
1. У вас есть две строки, соответствующие условиям. В чем же проблема?
2. дело работает на уровне столбца.
3. Возможно ли разбить инструкцию case после соответствия первому условию ?
4. Это два отдельных кода, которые соответствуют условию ZG0 и ZG1
5. @GeorgeJoseph В дате, как
select KOD from ap_magazyny mag where 1 = case when (atrybut_t01 = 5902596218362 AND rownum = 1) then 1 when ('ZZT/ZG1/00023/07/2021' like 'ZZ%' and mag.KOD like (select SUBSTR('ZZT/ZG1/00023/07/2021',INSTR('ZZT/ZG1/00023/07/2021','/',1) 1,3) from dual)) then 1 else 0 end
только 1 значение совпадения в первом условии его ZG1
Ответ №1:
Я надеюсь, что мой пример поможет:
with cte as (select case when id = 1 then
1
else
2
end A
from test
where rownum = 1)
select *
from test
join cte on test.id = cte.A
Вам нужно будет подключить его к чему-то, потому что 1 всегда будет 1, и вы получите все результаты из табличного теста.
Ответ №2:
Вы можете использовать rownum=1 для ограничения результатов.
select * from (
select KOD
from ap_magazyny mag
where 1 = case when (value1 like 'ZZ%'
and mag.KOD like (select SUBSTR(value1,INSTR(value1,'/',1) 1,3)
from dual)
) then 1
when (atrybut_t01 = value2 AND rownum = 1) then 1
else 0
end
order by case when (value1 like 'ZZ%'
and mag.KOD like (select SUBSTR(value1,INSTR(value1,'/',1) 1,3)
from dual)
) then 1
when (atrybut_t01 = value2 AND rownum = 1) then 2
end
)x
where rownum=1
Комментарии:
1. Используя rownum, он получает случайный результат в зависимости от того, какой результат база данных помещает сверху. К сожалению, порядок результатов не соответствует порядку обращения
2. предположим, что только значение 2 приводит к двум записям, каким должен быть порядок
3. обновлен ответ, который будет упорядочен по условиям, которые выполняются в первую очередь