Допустим, я создаю адресную книгу, в которой есть 4 таблицы: user
, contact
, friend
и stranger
.
contact
- это таблица связей, соединяющая user
с ОБА * таблицы friend
и stranger
. Он структурирован как:
╔════╦═════════╦═══════════╦═════════════╗
║ id ║ user_id ║ friend_id ║ stranger_id ║
╠════╬═════════╬═══════════╬═════════════╣
║ 1 ║ 1 ║ 5 ║ NULL ║
╠════╬═════════╬═══════════╬═════════════╣
║ 2 ║ 1 ║ NULL ║ 65 ║
╠════╬═════════╬═══════════╬═════════════╣
║ 3 ║ 1 ║ 87 ║ NULL ║
╚════╩═════════╩═══════════╩═════════════╝
Я хотел бы создать представление, которое выглядит следующим образом:
╔════╦═════════╦═══════════╦═════════════╦══════════════╗
║ id ║ user_id ║ friend_id ║ stranger_id ║ contact_name ║
╠════╬═════════╬═══════════╬═════════════╬══════════════╣
║ 1 ║ 1 ║ 5 ║ NULL ║ Barry ║
╠════╬═════════╬═══════════╬═════════════╬══════════════╣
║ 2 ║ 1 ║ NULL ║ 65 ║ Gary ║
╠════╬═════════╬═══════════╬═════════════╬══════════════╣
║ 3 ║ 1 ║ 87 ║ NULL ║ Larry ║
╚════╩═════════╩═══════════╩═════════════╩══════════════╝
То есть мне нужно представление, которое я могу запросить, используя user_id
и получить список всех контактов этого пользователя с столбцом name
, общим для таблиц friend
и stranger
.
В идеале, я хотел бы реализовать это, используяTypeORM, но просто знание правильного SQL для него также поможет.