Соединение двух разных таблиц в БД

Возможно ли в postgresql соединить разные таблицы по такой логике: есть таблица "животные" и есть таблица "вольеры" (вольеров может быть меньше) (таблицы состоят из полей id и name)

Как создать таблицу, в которой будет распределение животных по вольерам (случайное, главное не засунуть двух животных в один вольер).

SELECT атрибутов из разных таблиц дает всевозможные сочетания, что никак не помогает. Группировкой по одному из полей получается либо "одно животное во всех вольерах", либо "все животные в одном вольере".

Думал еще над попыткой пронумеровать (ввести столбец в каждый селект) и join-ить по номеру строки. Но не вышлo: select ... row_number() over() as animal_row_num и такой же select с row_number() over() as cage_row_num и потом join on cage_row_num = animal_row_num не помогает.

Подскажите, возможно ли как-то разрешить такой кейс?

UPD: Структура таблицы

create table animal (id integer, name varchar(100));
insert into animal (id, name) values (1, 'cat');
insert into animal (id, name) values (2, 'dog');
insert into animal (id, name) values (3, 'bird'); 

create table cage (id integer, name varchar(100)); 
insert into cage (id, name) values (1, 'cage1'); 
insert into cage (id, name) values (2, 'cage2'); 
insert into cage (id, name) values (3, 'cage3');

Запрос пытаюсь составить

select animal.name, row_number() over() as animal_row_number 
from animal JOIN (select cage.name, row_number() over() as cage_row_number from cage) tbl join on cage_row_number = animal_row_number

Но он ругается на то, что имеется синтаксическая ошибка около ON. Понять не могу как обратиться к ROW_NUMBER() полученного внутри каждого select. К сожалению, гугл не помог в этом вопросе(

UPD: Спасибо Akina, получено:


select animal_name, cage_name from 
(select animal.name as animal_name, row_number() over() as animal_row_number from animal) tbl1
JOIN (select cage.name as cage_name, row_number() over() as cage_row_number from cage) tbl2 on tbl2.cage_row_number = tbl1.animal_row_number

Ответы (1 шт):

Автор решения: aristari
select animal_name, cage_name from 
(select animal.name as animal_name, row_number() over() as animal_row_number from animal) tbl1
JOIN (select cage.name as cage_name, row_number() over() as cage_row_number from cage) tbl2 on tbl2.cage_row_number = tbl1.animal_row_number

Спасибо Akina за помощь.

→ Ссылка