Соедините cities и users по city_id. LEFT JOIN сохранит также города без жителей, а INNER JOIN покажет только существующие пары город–пользователь.
Названия городов и их жители
Соедините cities и users по city_id. LEFT JOIN сохранит также города без жителей, а INNER JOIN покажет только существующие пары город–пользователь.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Получите список названий городов вместе с именами пользователей, проживающих в каждом из них.
-- Таблица "cities"
create table cities (
id serial primary key,
name text not null
);
insert into cities (name)
values
('Москва'),
('Санкт-Петербург'),
('Краснодар');
-- Таблица "users"
create table users (
id serial primary key,
name text not null,
city_id int not null references cities(id)
);
insert into users (name, city_id)
values
('Иван', 1),
('Анна', 1),
('Олег', 2);
Ответ
Соедините cities и users по city_id. LEFT JOIN сохранит также города без жителей, а INNER JOIN покажет только существующие пары город–пользователь.
Вариант со всеми городами:
SELECT c.name AS city, u.name AS resident
FROM cities AS c
LEFT JOIN users AS u ON u.city_id = c.id
ORDER BY c.id, u.id;
Получатся Москва–Иван, Москва–Анна, Санкт-Петербург–Олег и Краснодар–NULL. Если нужны только города с пользователями, замените LEFT JOIN на JOIN. Несколько пользователей дают несколько строк, а не список имён в одной ячейке.