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

а вы для начала обьясните что такое outher apply а мы подскажем...
...
Рейтинг: 0 / 0
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #37818504
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #37818515
PG81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #37818540
hydrobiont
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PG81,

Именно outer/cross apply как в sql-сервере в пг нету. Можно поробовать эмулировать с помощью параметризованного CTE. Только наверное в функцию придется запрос завернуть.
...
Рейтинг: 0 / 0
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #37818543
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #37818545
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #37878898
PostgreDummy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #37879192
hydrobiont
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostgreDummy,


Честно говоря сложно гадать что делает у вас dbo.GetCitizenRecModified и табличная ли это вообще функция.
посмотрите по вот этой ссылке и если будут более конкретные вопросы, постараемся помочь;-)
...
Рейтинг: 0 / 0
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38063711
не оно?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38064235
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
не оно? , и в каком официальном релизе уже используется?
...
Рейтинг: 0 / 0
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38064334
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V&N не оно? , и в каком официальном релизе уже используется?

lateral будет в 9.3 только
и таки да это аналог MSSQL ных CROSS APPLY and OUTER APPLY constructs
...
Рейтинг: 0 / 0
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38064539
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38064573
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38064579
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38064595
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
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
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38068205
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем вас массив не устраивает?
Код: 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
Период между сообщениями больше года.
аналог outer apply из MS SQL SERVER 2005 в postgres 9
    #38969502
PG81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

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

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

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

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


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