@Artem0071
Безработный mr. Junior

Как сделать один запрос?

Есть 3 таблицы:
1 - block (main_block_id, data, type)
2 - block_one (id, main_block_id, another_data)
3 - block_two (id, main_block_id, third_data)

1 и 2, и 1 и 3 связаны
Каждый block имеет свой подблок в block_one или в block_two
Определяется этот блок в block.type

Т.е. если block.type == 'one', то будет браться JOIN с block_one

Сейчас это 2 запроса
Сначала определяется какой тип, и затем ищется

Можно ли это сделать все в один запрос?
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Можно. Оператор case вам в помощь.
Ответ написан
Комментировать
denman1985
@denman1985
SQL, Oracle Forms/Reports dbd
Либо
select a.data, b.another_data
from block as a join block_one as b on (a.main_block_id=b.main_block_id)
where a.type = 'one'
union all
select a.data, b.third_data
from block as a join block_two as b on (a.main_block_id=b.main_block_id)
where a.type = 'two'


Либо
select distinct a.data, 
(case when a.type='one' then b.another_data else c.third_data end) as some_data
from block as a left join block_one as b on (a.type = 'one' and a.main_block_id=b.main_block_id)
left join block_two as c on (a.type = 'two' and a.main_block_id=c.main_block_id)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы