powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Синтаксис подзапроса в join
5 сообщений из 5, страница 1 из 1
Синтаксис подзапроса в join
    #40077680
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
select parententi0_.id as col_0_0_ 
    from Parent parententi0_ 
left outer join Child2 parententi0_1_                                                                       on parententi0_.id=parententi0_1_.id 
left outer join Child5 parententi0_2_                                                                       on parententi0_.id=parententi0_2_.id 
left outer join Child4 parententi0_3_                                                                       on parententi0_.id=parententi0_3_.id 
left outer join Child1 parententi0_4_                                                                       on parententi0_.id=parententi0_4_.id 
left outer join Child3 parententi0_5_                                                                       on parententi0_.id=parententi0_5_.id     
left outer join (Child1 child1enti1_ inner join Parent child1enti1_1_ on child1enti1_.id=child1enti1_1_.id) on parententi0_.id=child1enti1_.id
left outer join (Child2 child2enti2_ inner join Parent child2enti2_1_ on child2enti2_.id=child2enti2_1_.id) on parententi0_.id=child2enti2_.id 
left outer join (Child3 child3enti3_ inner join Parent child3enti3_1_ on child3enti3_.id=child3enti3_1_.id) on parententi0_.id=child3enti3_.id
where
    case 
         when parententi0_1_.id is not null then 1 
         when parententi0_2_.id is not null then 2 
         when parententi0_3_.id is not null then 3 
         when parententi0_4_.id is not null then 4 
         when parententi0_5_.id is not null then 5 
         when parententi0_.id is not null then 0 
     end=4 
     and (child1enti1_.status like 'Enable') 
or 
    case 
        when parententi0_1_.id is not null then 1 
        when parententi0_2_.id is not null then 2 
        when parententi0_3_.id is not null then 3 
        when parententi0_4_.id is not null then 4 
        when parententi0_5_.id is not null then 5 
        when parententi0_.id is not null then 0 
     end=1 
     and (child2enti2_.status like 'Disable') 
or 
    case 
        when parententi0_1_.id is not null then 1 
        when parententi0_2_.id is not null then 2 
        when parententi0_3_.id is not null then 3 
        when parententi0_4_.id is not null then 4 
        when parententi0_5_.id is not null then 5 
        when parententi0_.id is not null then 0 
     end=5 
     and (child3enti3_.status like 'Enable')



Подскажите, что за форма подзапроса в некоторых join-ах:
Код: sql
1.
left outer join (Child1 child1enti1_ inner join Parent child1enti1_1_ on child1enti1_.id=child1enti1_1_.id) on parententi0_.id=child1enti1_.id


Где можно про нее почитать?
Я привык к чему то такому:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select y.CategoryID, 
    y.CategoryName,
    round(x.actual_unit_price, 2) as "Actual Avg Unit Price",
    round(y.planned_unit_price, 2) as "Would-Like Avg Unit Price"
from
(
    select avg(a.UnitPrice) as actual_unit_price, c.CategoryID
    from order_details as a
    inner join products as b on b.ProductID = a.ProductID
    inner join categories as c on b.CategoryID = c.CategoryID
    group by c.CategoryID
) as x
inner join 
(
    select a.CategoryID, b.CategoryName, avg(a.UnitPrice) as planned_unit_price
    from products as a
    inner join categories as b on b.CategoryID = a.CategoryID
    group by a.CategoryID
) as y on x.CategoryID = y.CategoryID
...
Рейтинг: 0 / 0
Синтаксис подзапроса в join
    #40077759
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen
что за форма подзапроса в некоторых join-ах
Как и в любом выражении - порядок, в данном случае связывания, определяется скобками.
...
Рейтинг: 0 / 0
Синтаксис подзапроса в join
    #40077775
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
Я обычно встречал такую форму подзапроса
Код: sql
1.
select * from table0 join (select * from table1 join table2 on table1.id = table2.id) alias on alias.id = table0.id 


а в запросе в примере
Код: sql
1.
select * from table0 join (table1 alias1 join table2 alias2 on alias1.id = alias2.id)  on alias1.id = table0.id 



Т.е. в конструкции подзапроса отсутствует "select * from" + alias подзапроса находится внутри самого подзапроса, а не в конце (за закрывающей скобкой). Попытка добавить конструкцию where в подзапрос приводила к ошибке.

Интуитивно я понимаю как работает эта конструкция - к одной таблице джойняться поля другой и полученный подзапрос получает алиас первой таблицы. Просто нигде не встречал такой записи подзапроса, а гугл не помог (может плохо искал ... хз)
...
Рейтинг: 0 / 0
Синтаксис подзапроса в join
    #40077791
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen
Подскажите, что за форма подзапроса в некоторых join-ах:
Это вообще не подзапросы, это те же самые джойны из основной секции from. Только логический порядок их выполнения обозначен скобками.
...
Рейтинг: 0 / 0
Синтаксис подзапроса в join
    #40077792
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, понял, спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Синтаксис подзапроса в join
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]