powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вывести FK
3 сообщений из 3, страница 1 из 1
Как вывести FK
    #39323322
tiroo97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такое задание:
CREATE TABLE region (
id_reg INT,
name VARCHAR (100) );

CREATE TABLE obl (
id_obl INT,
id_reg INT,
name_obl VARCHAR (50));

CREATE TABLE type_rod (
id_type INT,
type VARCHAR(60));

CREATE TABLE size_rod (
id_size INT,
size VARCHAR (10));

CREATE TABLE rodowushcha (
id_rod INT,
name_rod VARCHAR(40),
id_obl INT,
location VARCHAR(100),
id_type INT,
id_size_oil INT,
id_size_gas INT,
year_open INT,
year_working INT );

ALTER TABLE region ADD PRIMARY KEY (id_reg);
ALTER TABLE obl ADD PRIMARY KEY (id_obl);
ALTER TABLE obl ADD CONSTRAINT cs_obl FOREIGN KEY(id_reg) REFERENCES region (id_reg);
ALTER TABLE type_rod ADD PRIMARY KEY (id_type);
ALTER TABLE size_rod ADD PRIMARY KEY (id_size);
ALTER TABLE rodowushcha ADD PRIMARY KEY (id_rod);
ALTER TABLE rodowushcha ADD CONSTRAINT cs_rodowushcha FOREIGN KEY (id_obl) REFERENCES obl (id_obl);
ALTER TABLE rodowushcha ADD FOREIGN KEY (id_type) REFERENCES type_rod (id_type);
ALTER TABLE rodowushcha ADD FOREIGN KEY (id_size_oil) REFERENCES size_rod (id_size);
ALTER TABLE rodowushcha ADD FOREIGN KEY (id_size_gas) REFERENCES size_rod (id_size);

Хочу сделать вывод полной бд:
select rodowushcha.id_rod,
region.name,
obl.name_obl,
rodowushcha.name_rod,rodowushcha.location,
type_rod.type,
size_rod.size,
size_rod.size,
rodowushcha.year_open,rodowushcha.year_working
from region
inner join obl on region.id=obl.oblast_id
inner join rodowushcha on obl.id=rodowushcha.id_obl
left join type_rod on rodowushcha.id_type=type_rod.id_type
left join size_rod on rodowushcha.id_size_oil=size_rod.id_size
or rodowushcha.id_size_gas=size_rod.id_size
order by id_rod

Проблема, что ПК из таблицы size_rod имеет два ФК в табл родовища и не выводит правильно. Незнаю как обьяснить по сути(
...
Рейтинг: 0 / 0
Как вывести FK
    #39323324
tiroo97
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tiroo97,
...
Рейтинг: 0 / 0
Как вывести FK
    #39326336
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiroo97,

Так? Если что допилить

Код: sql
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.
26.
27.
28.
select constraint_name,
       schema_name,
       table_name,
       columns_names,
       foreign_schema_name,
       foreign_table_name,
       foreign_columns_names
from (
       select c.constraint_name,
              x.table_schema as schema_name,
              x.table_name,
              x.column_name,
              x.ordinal_position,
              String_Agg(x.column_name, ',') over(partition by c.constraint_name order by x.ordinal_position) columns_names,
                y.table_schema as foreign_schema_name,
                y.table_name as foreign_table_name,
                y.column_name as foreign_column_name,
                y.ordinal_position foreign_position,
                String_Agg(y.column_name, ',') over(partition by c.constraint_name order by y.ordinal_position) foreign_columns_names,
                max(x.ordinal_position) over(partition by c.constraint_name) cnt_columns
       from information_schema.referential_constraints c
            join information_schema.key_column_usage x 
                  on x.constraint_name = c.constraint_name
            join information_schema.key_column_usage y 
                  on y.ordinal_position = x.position_in_unique_constraint and y.constraint_name = c.unique_constraint_name
     ) sql
where sql.ordinal_position = sql.cnt_columns
order by constraint_name
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вывести FK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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