|
|
|
JOIN..JOIN
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, проконсультируйте пожалуйста как правильно сделать выборку из нескольких таблиц с join по связям с группировкой по жанру с присоединением наименования книги, автора или по автору с присоединением наименования книги, жанра. По отдельности запросы формируются а вместе знаний не хватает. Запросы: select genre.genres, array_agg(books.name) from genre inner join books on genre.books_id = books.id group by genre.genres; ------------+---------------------------------------------------------------- Драма | {Чапаев,"Три толстяка"} Учебник | {Ubuntu,VMWare,Basic,CentOS,"MS Project",Visio,"Windows 2008"} Фантастика | {"Властелин колец",Мумия,Матрица} Юмор | {Рыжик,Незнайка,Буратино} select autors.fio, array_agg(books.name) from autors inner join books on books.autors_id = autors.id group by autors.fio; -------------------------------------+-------------------------------------------------- Александров Александр Александрович | {"Windows 2008",Visio,"MS Project"} Иванов Иван Иванович | {Рыжик,Чапаев,Буратино} Петров Петр Петрович | {"Властелин колец","Три толстяка",Мумия,Матрица} Семенов Семен Семенович | {Ubuntu,CentOS,VMWare,Basic} Сидоров Сидор Сидорович | {Незнайка} (5 rows) Таблицы: ---+------------------------------------- 1 | Иванов Иван Иванович 2 | Сидоров Сидор Сидорович 3 | Петров Петр Петрович 5 | Семенов Семен Семенович 4 | Александров Александр Александрович (5 rows) products=# select * from books; id | autors_id | name ----+-----------+----------------- 1 | 1 | Рыжик 2 | 1 | Чапаев 3 | 1 | Буратино 4 | 2 | Незнайка 5 | 3 | Три толстяка 6 | 3 | Мумия 7 | 3 | Матрица 8 | 3 | Властелин колец 9 | 4 | Visio 10 | 4 | MS Project 11 | 4 | Windows 2008 12 | 5 | Ubuntu 13 | 5 | CentOS 14 | 5 | VMWare 15 | 5 | Basic (15 rows) products=# select * from genre; id | books_id | genres ----+----------+------------ 1 | 1 | Юмор 2 | 2 | Драма 3 | 3 | Юмор 4 | 4 | Юмор 5 | 5 | Драма 6 | 6 | Фантастика 7 | 7 | Фантастика 8 | 8 | Фантастика 9 | 9 | Учебник 10 | 10 | Учебник 11 | 11 | Учебник 12 | 12 | Учебник 13 | 13 | Учебник 14 | 14 | Учебник 15 | 15 | Учебник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 17:59 |
|
||
|
JOIN..JOIN
|
|||
|---|---|---|---|
|
#18+
Вопрос снят, разобрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2016, 08:59 |
|
||
|
JOIN..JOIN
|
|||
|---|---|---|---|
|
#18+
Все таки помощь клуба нужна 3 таблицы table1 table2 table3 id fio id name fio_id note id note name_id 1 fio_1 1 name_1 1 1 1 note_1 1 2 fio_2 2 name_2 1 1 2 note_2 2 3 fio_3 3 name_3 2 1 3 note_3 3 4 fio_4 4 name_4 3 2 4 note_4 4 5 fio_5 5 name_5 3 2 6 name_6 4 4 7 name_6 4 3 8 name_8 4 3 9 name_9 4 3 10 name_10 5 4 11 name_11 5 3 12 name_12 4 3 Запрос типа select table3.note, table1.fio, array_agg(table2.name) from table3 join table2 on table2.note = table3.name_id join table1 on table1.id = table2.fio_id group by table3.note, table1.fio; Выводит ответ с повторяющимися записями что то типа такого: table3 | table1 | array_agg ------------+--------------------------+----------------------------------- note_1 | fio_1 | name_1 note_1 | fio_2 | name_2 note_2 | fio_4 | name_3, name4 note_2 | fio_3 | name_5, name_6 note_3 | fio_1 | name_7,name_8,name_9 note_3 | fio_3 | name_10 note_4 | fio_5 | name_11,name_12 как составить select так чтобы была группировка в table3 b table1 по записям и не было повторений, ну и в array_agg объединялись записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2016, 13:04 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=1997413]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 454ms |

| 0 / 0 |
