Я знаю, что это зачитывает ваш вопрос, поэтому, если он не соответствует вашей ситуации, сообщите об этом в комментариях, и я удалю его.
Я сталкивался с ситуациями, когда у элемента есть имя по умолчанию, но мы хотим показать индивидуальное имя для определенных пользователей.
Смоделировано следующим образом:
Схема (PostgreSQL v11)
create table item (
id int primary key,
default_name text
);
create table user_tab (
id int primary key,
user_name text
);
create table item_user_name_override (
item_id int references item(id),
user_id int references user_tab(id),
custom_name text
);
insert into user_tab values (1, 'special_user'), (2, 'regular_guy');
insert into item values (1, 'Item 1'), (2, 'Item 2'), (3, 'Item 3');
insert into item_user_name_override values (1, 1, 'Special Name for Item 1');
Извлечь все пары пользователь / элемент
select u.user_name, i.id as item_id,
coalesce(no.custom_name, i.default_name) as item_name
from user_tab u
cross join item i
left join item_user_name_override no
on no.item_id = i.id and no.user_id = u.id
order by i.id, u.id
;
| user_name | item_id | item_name |
| ------------ | ------- | ----------------------- |
| special_user | 1 | Special Name for Item 1 |
| regular_guy | 1 | Item 1 |
| special_user | 2 | Item 2 |
| regular_guy | 2 | Item 2 |
| special_user | 3 | Item 3 |
| regular_guy | 3 | Item 3 |
Просмотр на скрипте DB