Соедините cities и users по users.city_id = cities.id. Один город будет повторён для каждого проживающего в нём пользователя.
Получение названий городов вместе с именами их жителей
Соедините cities и users по users.city_id = cities.id. Один город будет повторён для каждого проживающего в нём пользователя.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Составьте SQL‑запрос, который выводит название города и имя пользователя, проживающего в этом городе.
create table cities (
id serial primary key,
name text not null
);
insert into cities (name)
values
('Москва'),
('Санкт-Петербург'),
('Краснодар');
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);
-- здесь должен быть SELECT-запрос
``
Ответ
Соедините cities и users по users.city_id = cities.id. Один город будет повторён для каждого проживающего в нём пользователя.
Запрос:
SELECT c.name AS city, u.name AS user_name
FROM cities c
JOIN users u ON u.city_id = c.id
ORDER BY c.id, u.id;
Получатся Москва — Иван, Москва — Анна, Санкт-Петербург — Олеся. Краснодар не имеет пользователя и в INNER JOIN отсутствует. Если нужно показывать и пустые города, используйте LEFT JOIN: имя пользователя там будет NULL. DISTINCT здесь не нужен и мог бы скрыть разных жителей с одинаковыми именами.