ORACLE SQL проверяет, является ли номер строки таблицы n, затем выполняет объединение - PullRequest
0 голосов
/ 01 октября 2018

TABLE ученик: ID, ID2, ИМЯ, ВОЗРАСТ

TABLE класс: ID, CLASS_NAME, некоторые другие столбцы

TABLE школа: ID2, некоторые другие столбцы.

Я пытаюсь выполнить ниже в Oracle SQL:

Если количество записей в ТАБЛИЦЕ "ученик" с возрастом> 5, 1, объединить таблицу учеников с таблицей "КЛАСС" по "ID", иначесоедините таблицу учеников со «школьной» таблицей с помощью «ID2».

Я обнаружил, что не могу указать счетчик в предложении where.Может кто-нибудь помочь?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

вы можете использовать левое соединение с регистром

   select s.*, case when age > 5 then COALESCE (c.ID,scl.ID2) as id 
     from student s
    left join class c on s.ID=c.ID
    left join school scl on s.ID2=scl.ID2
0 голосов
/ 01 октября 2018

Как сказал Гордон, оконные функции являются опцией, но это также редкий случай, когда вы можете сознательно выполнять перекрестное соединение:

select s.*
,...
from students s
left join
(
select count(*) as RECORD_COUNT
from students
where age > 5
) sub
on 1 = 1
left join class c
on s.id = c.id
and sub.record_count = 1
left join school h
on s.id2 = h.id2
and c.id is null
0 голосов
/ 01 октября 2018

Я бы использовал оконные функции:

select s.*, . . .
from (select s.*, sum(case when age > 5 then 1 else 0 end) over () as cnt5
      from students s
     ) s left join
     class c
     on c.id = s.id and cnt5 = 1 left join
     school sch
     on sch.id2 = s.id2 and cnt5 <> 1
where c.id is not null or sch.id is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...