внутреннее соединение postgresql - как я могу сделать так, чтобы "id" был одинаковым в 2 таблицах - PullRequest
0 голосов
/ 14 июля 2020

это мои таблицы, и я хочу объединить их вместе с "testuser_id". как я могу сделать так, чтобы "testuser_id" был таким же в адресе, как и в testuser.

create table testuser ( 
    testuser_id serial,
    testuser_name varchar(100),
    testuser_number int,
    primary key(testuser_id)
)


create table adress( 
    adress_id serial,
    testuser_id int,
    adress_code int,
    street varchar(200),
    primary key(adress_id)
)

insert into testuser (testuser_name, testuser_number) values ('fnsnfsdfpi', 645645), ('fsdgfdg', 4634643)

insert into adress (adress_code, street) values (3453, 'gdfghdf'), (6463, 'gdgdgdg')

поэтому, когда я запускаю

select testuser.testuser_id ,testuser_name,testuser_number,adress_code,street 
from testuser INNER JOIN
     adress
     ON adress.testuser_id = testuser.testuser_id

, я получаю одну таблицу с данными, которые я вставил в их

введите описание изображения здесь

если кто-то получит то, что я пытаюсь сделать, пожалуйста, помогите :)

1 Ответ

2 голосов
/ 14 июля 2020

Хммм. . . Я понимаю, что вы хотите как-то выстроить столы. Если это так, вы можете использовать CTE с оператором insert:

with tu as (
      insert into testuser (testuser_name, testuser_number)
          values ('fnsnfsdfpi', 645645), ('fsdgfdg', 4634643)
          returning *
    )
insert into adress (adress_code, street, testuser_id)
    select v.adress_code, v.street, tu.testuser_id
    from (select v.*, row_number() over () as seqnum
          from (values (3453, 'gdfghdf'),
                       (6463, 'gdgdgdg')
               ) v(adress_code, street)
         ) v join
         (select tu.*, row_number() over (order by testuser_id) as seqnum
          from tu
         ) tu
         on tu.seqnum = v.seqnum;

Здесь - скрипт db <>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...