|
|
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть три таблицы: 1. tClient idClient Name 2. tCat idCat Name 3. tClientCat idClientidCatidType На tClientCat ограничения: Код: sql 1. 2. Результат должен иметь такой вид: ClientName Cat1 Cat2 Cat3 client1category1 null nullclient2category3 category2 nullclient3category1 category2 category3 Подскажите пожалуйста, как написать запрос, чтобы получить требуемую таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 16:46 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
Сделал так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Поправьте, если есть более оптимальное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 17:28 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
Есть одно ограничение, нельзя динамически менять состав полей. Если появится четвертая категория, то необходимо переписывать запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 17:42 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
big-trotЕсли появится четвертая категория, то необходимо переписывать запрос. см. crosstab http://www.postgresql.org/docs/9.5/static/tablefunc.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 17:52 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
pvscherbininболее оптимальное решение.crosstab придуманного для кодеров, неосиливших group by. классический pivot легко реализуется без привлечения расширения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 18:32 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
p2., переменное число столбцов на plain sql с помощью group by? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 18:40 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
tadminпеременное число столбцов на plain sql с помощью group by?так же, как и в случае crosstab(), только что в одном случае не указываются типы значений, а в другом состав категорий. Только вот crosstabный неявный маппинг категрий на колонки за счет сортировки чреват трудно диагностируемыми неожиданностями. И, к тому же, странно полагать динамичность формирования полей запроса, но статично ограничивать структуру. pvscherbininUNIQUE ("idClient", "idType") CHECK ("DanceType" = ANY (ARRAY[1, 2, 3])) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 19:18 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
tadmin см. crosstab http://www.postgresql.org/docs/9.5/static/tablefunc.html Еще раз освежил в памяти. Функции расширения tablefunc возвращают тип данных record. Для того чтобы обработать этот тип необходимо определить его структуру, это определение выполняется в запросе, например Код: sql 1. Если в таблицу tCat добавиться еще одна категория, например category4, то необходимо как минимум задать новую структуру record. А это, как я понимаю, необходимо переписать запрос. Если я не прав, готов выслушать замечания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 08:50 |
|
||
|
Select из трех таблиц
|
|||
|---|---|---|---|
|
#18+
big-trot необходимо как минимум задать новую структуру record. А это, как я понимаю, необходимо переписать запрос. Верно. Потребуется динамический sql и исполнение через execute. Не слишком удобно, и код плохо читается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 10:41 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=53&tid=1997519]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
164ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 424ms |

| 0 / 0 |
