Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / аналог outer apply из MS SQL SERVER 2005 в postgres 9 / 19 сообщений из 19, страница 1 из 1
30.05.2012, 18:03
    #37818480
PG81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
есть ли аналог outer apply в postgres 9
или как можно добиться такого же результата.
Че-то искал по форуму но ничего не нашел.
...
Рейтинг: 0 / 0
30.05.2012, 18:17
    #37818494
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
PG81есть ли аналог outer apply в postgres 9
или как можно добиться такого же результата.
Че-то искал по форуму но ничего не нашел.

а вы для начала обьясните что такое outher apply а мы подскажем...
...
Рейтинг: 0 / 0
30.05.2012, 18:26
    #37818504
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
...
Рейтинг: 0 / 0
30.05.2012, 18:35
    #37818515
PG81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
Maxim Bogukа вы для начала обьясните что такое outher apply а мы подскажем...

условно, есть главная таблица и детализация, отдел и сотрудники.
Получаем сведения по отделу + нужно получить суммарные сведения по сотрудникам

Код: sql
1.
2.
3.
4.
5.
select A.ID, A.Name, B.CountEmployee, B.MaxBirthDay
from Department A
outer apply(select count(1) as CountEmployee, max(BirthDay)as MaxBirthDay
                from Employee E
                where E.DepartmentID=A.ID)as B



Таким образом мы получаем, сведения по отделу и суммарные сведения из таблицы сотрудники отдела сразу одним запросом В. Запрос В выполняется для каждой записи запроса А. Если не использовать этот оператор, то для каждого поля запроса В придется писать отдельный запрос и получится примерно следующее

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select ID, Name, 
        (select count(1)
         from Employee 
         where DepartmentID=A.ID)as CountEmployee, 
        (select max(BirthDay)
         from Employee 
         where DepartmentID=A.ID)as MaxBirthDay
from Department A
...
Рейтинг: 0 / 0
30.05.2012, 18:55
    #37818540
hydrobiont
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
PG81,

Именно outer/cross apply как в sql-сервере в пг нету. Можно поробовать эмулировать с помощью параметризованного CTE. Только наверное в функцию придется запрос завернуть.
...
Рейтинг: 0 / 0
30.05.2012, 18:59
    #37818543
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
Код: plsql
1.
2.
3.
4.
5.
6.
select A.ID, A.Name, B.CountEmployee, B.MaxBirthDay
from Department A
left join (select E.DepartmentID, count(1) as CountEmployee, max(BirthDay)as MaxBirthDay
             from Employee E
            where E.DepartmentID
            group by E.DepartmentID) as B on (b.DepartmentID = a.id )
...
Рейтинг: 0 / 0
30.05.2012, 19:02
    #37818545
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
V&N
Код: plsql
1.
2.
3.
4.
5.
6.
select A.ID, A.Name, B.CountEmployee, B.MaxBirthDay
from Department A
left join (select E.DepartmentID, count(1) as CountEmployee, max(BirthDay)as MaxBirthDay
             from Employee E
            ---where E.DepartmentID
            group by E.DepartmentID) as B on (b.DepartmentID = a.id )
...
Рейтинг: 0 / 0
13.07.2012, 20:07
    #37878898
PostgreDummy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
hydrobiontPG81,

Именно outer/cross apply как в sql-сервере в пг нету. Можно поробовать эмулировать с помощью параметризованного CTE. Только наверное в функцию придется запрос завернуть.

А вы не могли бы хоть какой-то элементарный примерчик привести? пожаааалуста :-)

вот хотя бы на этом скрипте:
Код: sql
1.
2.
3.
4.
5.
SELECT *
FROM V_CitizenVersions         
CROSS APPLY     
       dbo.GetCitizenRecModified(Citizen, LastName, FirstName, MiddleName,
BirthYear, BirthMonth, BirthDay, ..... )
...
Рейтинг: 0 / 0
14.07.2012, 11:54
    #37879192
hydrobiont
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
PostgreDummy,


Честно говоря сложно гадать что делает у вас dbo.GetCitizenRecModified и табличная ли это вообще функция.
посмотрите по вот этой ссылке и если будут более конкретные вопросы, постараемся помочь;-)
...
Рейтинг: 0 / 0
04.12.2012, 08:58
    #38063711
не оно?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
http://www.postgresql.org/docs/devel/static/queries-table-expressions.html#QUERIES-FROM

7.2.1.5. LATERAL Subqueries

Subqueries and table functions appearing in FROM can be preceded by the key word LATERAL. This allows them to reference columns provided by preceding FROM items. (Without LATERAL, each FROM item is evaluated independently and so cannot cross-reference any other FROM item.) A LATERAL item can appear at top level in the FROM list, or within a JOIN tree; in the latter case it can also refer to any items that are on the left-hand side of a JOIN that it is on the right-hand side of.

When a FROM item contains LATERAL cross-references, evaluation proceeds as follows: for each row of the FROM item providing the cross-referenced column(s), or set of rows of multiple FROM items providing the columns, the LATERAL item is evaluated using that row or row set's values of the columns. The resulting row(s) are joined as usual with the rows they were computed from. This is repeated for each row or set of rows from the column source table(s).
...
Рейтинг: 0 / 0
04.12.2012, 13:28
    #38064235
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
не оно? , и в каком официальном релизе уже используется?
...
Рейтинг: 0 / 0
04.12.2012, 14:19
    #38064334
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
V&N не оно? , и в каком официальном релизе уже используется?

lateral будет в 9.3 только
и таки да это аналог MSSQL ных CROSS APPLY and OUTER APPLY constructs
...
Рейтинг: 0 / 0
04.12.2012, 15:53
    #38064539
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
Maxim BogukV&N не оно? , и в каком официальном релизе уже используется?

lateral будет в 9.3 только
и таки да это аналог MSSQL ных CROSS APPLY and OUTER APPLY constructsпока слишком сыро
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -I../../../src/include -D_GNU_SOURCE   -c -o hba.o hba.c
hba.c: In function ‘parse_hba_auth_opt’:
hba.c:1388: error: ‘LDAP_SCOPE_SUBTREE’ undeclared (first use in this function)
hba.c:1388: error: (Each undeclared identifier is reported only once
hba.c:1388: error: for each function it appears in.)
hba.c:1451: error: ‘LDAPURLDesc’ undeclared (first use in this function)
hba.c:1451: error: ‘urldata’ undeclared (first use in this function)
hba.c:1452: warning: ISO C90 forbids mixed declarations and code
hba.c:1452: warning: unused variable ‘rc’
make[3]: *** [hba.o] Error 1
make[3]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src/backend/libpq'
make[2]: *** [libpq-recursive] Error 2
make[2]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src/backend'
make[1]: *** [all-backend-recurse] Error 2
make[1]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src'
make: *** [all-src-recurse] Error 2
# uname -a
Linux localhost 3.1.10-1.16-desktop #1 SMP PREEMPT Wed Jun 27 05:21:40 UTC 2012 (d016078) x86_64 x86_64 x86_64 GNU/Linux
# gcc --version
gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
подождем еще немножко ...
...
Рейтинг: 0 / 0
04.12.2012, 16:13
    #38064573
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
V&NMaxim Bogukпропущено...


lateral будет в 9.3 только
и таки да это аналог MSSQL ных CROSS APPLY and OUTER APPLY constructsпока слишком сыро
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -I../../../src/include -D_GNU_SOURCE   -c -o hba.o hba.c
hba.c: In function ‘parse_hba_auth_opt’:
hba.c:1388: error: ‘LDAP_SCOPE_SUBTREE’ undeclared (first use in this function)
hba.c:1388: error: (Each undeclared identifier is reported only once
hba.c:1388: error: for each function it appears in.)
hba.c:1451: error: ‘LDAPURLDesc’ undeclared (first use in this function)
hba.c:1451: error: ‘urldata’ undeclared (first use in this function)
hba.c:1452: warning: ISO C90 forbids mixed declarations and code
hba.c:1452: warning: unused variable ‘rc’
make[3]: *** [hba.o] Error 1
make[3]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src/backend/libpq'
make[2]: *** [libpq-recursive] Error 2
make[2]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src/backend'
make[1]: *** [all-backend-recurse] Error 2
make[1]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src'
make: *** [all-src-recurse] Error 2
# uname -a
Linux localhost 3.1.10-1.16-desktop #1 SMP PREEMPT Wed Jun 27 05:21:40 UTC 2012 (d016078) x86_64 x86_64 x86_64 GNU/Linux
# gcc --version
gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
подождем еще немножко ...

hmm у меня 4 дня назад собирался нормально... посмотрю что не так
...
Рейтинг: 0 / 0
04.12.2012, 16:14
    #38064579
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
Maxim BogukV&Nпропущено...
пока слишком сыро
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -I../../../src/include -D_GNU_SOURCE   -c -o hba.o hba.c
hba.c: In function ‘parse_hba_auth_opt’:
hba.c:1388: error: ‘LDAP_SCOPE_SUBTREE’ undeclared (first use in this function)
hba.c:1388: error: (Each undeclared identifier is reported only once
hba.c:1388: error: for each function it appears in.)
hba.c:1451: error: ‘LDAPURLDesc’ undeclared (first use in this function)
hba.c:1451: error: ‘urldata’ undeclared (first use in this function)
hba.c:1452: warning: ISO C90 forbids mixed declarations and code
hba.c:1452: warning: unused variable ‘rc’
make[3]: *** [hba.o] Error 1
make[3]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src/backend/libpq'
make[2]: *** [libpq-recursive] Error 2
make[2]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src/backend'
make[1]: *** [all-backend-recurse] Error 2
make[1]: Leaving directory `/usr/src/packages/BUILD/postgresql-9.3devel/src'
make: *** [all-src-recurse] Error 2
# uname -a
Linux localhost 3.1.10-1.16-desktop #1 SMP PREEMPT Wed Jun 27 05:21:40 UTC 2012 (d016078) x86_64 x86_64 x86_64 GNU/Linux
# gcc --version
gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
подождем еще немножко ...

hmm у меня 4 дня назад собирался нормально... посмотрю что не так

а вот и оно
http://archives.postgresql.org/pgsql-hackers/2012-12/msg00184.php
+
http://archives.postgresql.org/pgsql-committers/2012-12/msg00112.php
как я понимаю только что поправили
...
Рейтинг: 0 / 0
04.12.2012, 16:21
    #38064595
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
Maxim Boguk , да, On Mon, Dec 3, 2012 at 11:46:56PM -0500, Bruce Momjian
уже собрал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
psql (9.3devel)
Type "help" for help.

postgres=# select version();
                                                           version
------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.3devel on x86_64-unknown-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 64-bit
(1 row)

позже поковыряю LATERAL с табличными функциями.
...
Рейтинг: 0 / 0
06.12.2012, 16:05
    #38068205
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
А чем вас массив не устраивает?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with d as (
 select 1 id , 2 birthday
  union all
 select 1 id , 3 birthday
   union all
 select 2 id , 4 birthday
   union all
 select 4 id , 1 birthday
) , m as (
 select 1 id
  union all
 select 2 id
  union all
 select 3 id
)
select t2.id,t2.a[1] cnt,t2.a[2] mx from (
select t1.*,(select ARRAY[count(1),max(birthday)] from d where d.id=t1.id) a from m as t1) t2;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.05.2015, 10:50
    #38969502
PG81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
Maxim Boguk,

lateral это что такое?
не знаете появилось в 9.3
...
Рейтинг: 0 / 0
27.05.2015, 12:54
    #38969688
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог outer apply из MS SQL SERVER 2005 в postgres 9
PG81Maxim Boguk,

lateral это что такое?
не знаете появилось в 9.3

1)Зачем оживлять темы 3х летней давности?
2)прочтите документацию?
Или уточните вопрос.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / аналог outer apply из MS SQL SERVER 2005 в postgres 9 / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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