powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Соеденение 3 таблиц
4 сообщений из 4, страница 1 из 1
Соеденение 3 таблиц
    #34771528
Фотография ss25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица admins_acl в ней хранится перечень привилегий

Код: plaintext
1.
2.
3.
4.
CREATE TABLE admins_acl (
    admins_acl_id bigint DEFAULT  0  NOT NULL,
    admins_acl_name character varying NOT NULL,  
    "position" smallint DEFAULT  0  NOT NULL
);


и ест ьтаблица admins_group в ней хранится перечень групп

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE admins_group (
    admins_group_id bigint DEFAULT nextval('admins_group_seq'::regclass) NOT NULL,
    admins_group_name character varying NOT NULL,
    "position" smallint DEFAULT  0  NOT NULL
);

CREATE SEQUENCE admins_group_seq
    INCREMENT BY  1 
    NO MAXVALUE
    NO MINVALUE
    CACHE  1 ;

и есть таблица admins_group_acl_relation в ней хранятся связи групп с привилегиями

Код: plaintext
1.
2.
3.
4.
CREATE TABLE admins_group_acl_relation (
    admins_group_id bigint NOT NULL,
    admins_acl_id bigint NOT NULL
);


Задача получить такой результат

Код: plaintext
1.
2.
3.
4.
5.
6.
 admins_acl_id |         admins_acl_name          | admins_acl_id
---------------+----------------------------------+---------------
              1  | Главный администратор.           |
              2  | Администратор с полными правами. |
              3  | Авторизация                      |              3 
              4  | Доступ к модулю администраторов. |              4 

у меня получается только при наличии в таблице с группами только одной записи вот таким запросом

Код: plaintext
1.
acad=# select a.admins_acl_id, a.admins_acl_name, grel.admins_acl_id FROM admins_acl a LEFT JOIN admins_group_acl_relati
on grel ON a.admins_acl_id = grel.admins_acl_id, admins_group g WHERE g.admins_group_id =  16 ;

а если в таблице груп больше одной записи то результат не тот который мне нужен.


вот данные для таблиц

Код: plaintext
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.
COPY admins_acl (admins_acl_id, admins_acl_name, admins_acl_code, "position") FROM stdin;
 1 	Главный администратор.	god	 1 
 2 	Администратор с полными правами.	full	 2 
 3 	Авторизация	 000001 	 3 
 4 	Доступ к модулю администраторов.	 000002 	 4 
\.

COPY admins_group (admins_group_id, admins_group_name, "position") FROM stdin;
 14 	ghb	 1 
 15 	dghjdhgj	 2 
 16 	dghjdghj	 3 
 17 	kldhjdd	 4 
 18 	 55555 	 5 
 19 	k767	 6 
\.

COPY admins_group_acl_relation (admins_group_id, admins_acl_id) FROM stdin;
 14 	 1 
 15 	 2 
 16 	 3 
 16 	 4 
 17 	 1 
 18 	 3 
 19 	 4 
\.
...
Рейтинг: 0 / 0
Соеденение 3 таблиц
    #34771594
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А третью таблицу кто будет объединять?

Код: plaintext
1.
2.
3.
SELECT a.admins_acl_id, a.admins_acl_name FROM admins_acl a JOIN admins_group_acl_relation grel ON a.admins_acl_id = grel.admins_acl_id JOIN admins_group g 
ON g.admins_group_id = grel.admins_group_id
WHERE g.admins_group_id = 16;

Я также убрал повтор admins_acl_id из рузультируещего набора столцов по причине ненужности (так ка a.admins_acl_id = grel.admins_acl_id).
...
Рейтинг: 0 / 0
Соеденение 3 таблиц
    #34771717
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и объясните каким боком эта тема относится к PG? ;-)
...
Рейтинг: 0 / 0
Соеденение 3 таблиц
    #34771724
ыы25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все разобрался достаточно двух соеденений

Код: plaintext
SELECT a.admins_acl_id, a.admins_acl_name, grel.admins_acl_id FROM admins_acl a left JOIN admins_group_acl_relation grel ON a.admins_acl_id = grel.admins_acl_id AND grel.admins_group_id =  20 
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Соеденение 3 таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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