Я получаю ORA-00905: пропущено ключевое слово - PullRequest
0 голосов
/ 24 сентября 2019

Я пишу этот запрос, и когда я его запускаю, я получаю

ORA-00905: пропущенное ключевое слово

Я проверяю многие онлайн-проверки SQL-запросов и все ониответил, что это правильно, может ли тело помочь мне в чем проблема

select *
from T_TimelineItem ti
where ti.C_HIDE = 0
  and ti.F_RELATED_BUSINESS = 4335
  and exists(select *
             from T_Business b
                      inner join MM_BIZ_GUILDS g on b.C_ID = g.ID1
             where b.C_ID = ti.F_RELATED_BUSINESS
               and g.ID2 in (49))
  and (CASE ti.C_TYPE
           WHEN 1 then ti.C_ID in (select po.C_TIMELINEID
                                   from T_PRODUCT pr
                                            inner join T_POST po on po.C_ID = pr.F_POST
                                   where po.F_BUSINESS = ti.F_RELATED_BUSINESS
                                     and pr.F_GUILD in (49))
           WHEN 8 THEN ti.C_ID in (select po.C_TIMELINEID
                                   from T_COMPETITION com
                                            inner join T_POST po on po.C_ID = com.F_POST
                                   where po.F_BUSINESS = ti.F_RELATED_BUSINESS
                                     and com.F_GUILD in (49)) END);

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Не используйте case в where предложениях

and (ti.C_TYPE = 1 and ti.C_ID in (select po.C_TIMELINEID
                               from T_PRODUCT pr
                                        inner join T_POST po on po.C_ID = pr.F_POST
                               where po.F_BUSINESS = ti.F_RELATED_BUSINESS
                                 and pr.F_GUILD in (49)))

or (ti.C_TYPE = 8 and ti.C_ID in (select po.C_TIMELINEID
                               from T_COMPETITION com
                                        inner join T_POST po on po.C_ID = com.F_POST
                               where po.F_BUSINESS = ti.F_RELATED_BUSINESS
                                 and com.F_GUILD in (49)) END))
0 голосов
/ 24 сентября 2019

Я удалил несколько, потому что вы можете легко использовать равные для сравнения одного значения, и вам не нужно выделять все столбцы внутри exists

select *
from T_TimelineItem ti
where ti.C_HIDE = 0
  and ti.F_RELATED_BUSINESS = 4335
  and exists(select 1
             from T_Business b
                      inner join MM_BIZ_GUILDS g on b.C_ID = g.ID1
             where b.C_ID = ti.F_RELATED_BUSINESS
               and g.ID2 = 49
             )
  and (ti.C_TYPE=1
           and ti.C_ID in (select po.C_TIMELINEID
                                   from T_PRODUCT pr
                                            inner join T_POST po 
                                  on po.C_ID = pr.F_POST
                                   where po.F_BUSINESS = ti.F_RELATED_BUSINESS
                                     and pr.F_GUILD =49
                             )
           or ( ti.C_TYPE=8 and
                            ti.C_ID in (select po.C_TIMELINEID
                            from T_COMPETITION com
                            inner join T_POST po on po.C_ID = com.F_POST
                            where po.F_BUSINESS = ti.F_RELATED_BUSINESS
                            and com.F_GUILD =49
                      ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...