Как сделать JOIN с условием?
СУБД: MySQL 8.0.29
Есть таблица пользователей:
CREATE TABLE users ( id INT, country varchar(255) );
INSERT INTO `users` (`id`, `country`) VALUES
(1, "German"), (2, "USA"), (3, "France");
SELECT * FROM users;
Есть таблица зон влияния:
CREATE TABLE `influence-zone` ( id INT, name varchar(255), country varchar(255) );
INSERT INTO `influence-zone` (`id`, `name`, `country`) VALUES
(1, "zone", "German"), (2, "important", "USA"), (3, "zone89", "France"),
(4,"zone1", "ALL"), (5,"zone2", "ALL");
SELECT * FROM `influence-zone`;
Необходимо соотнести зоны влияния с пользователями, по стране.
Делаю так и решаю часть задачи:
SELECT * FROM `influence-zone` JOIN users ON `influence-zone`.country = users.country
Но остается две зоны (id: 4,5), со страной ALL.
Их нужно в выборке соотнести со всеми пользователями. Как это сделать одним запросом?
Ответы (1 шт):
Автор решения: lu_kiss
→ Ссылка
Если я правильно поняла
SELECT
*
FROM `influence-zone`
JOIN users ON `influence-zone`.country = users.country
WHERE `influence-zone`.country <> "ALL"
union all
SELECT
*
FROM `influence-zone`
CROSS JOIN users
WHERE `influence-zone`.country = "ALL"
Но данным соединением мы создаем декартово произведение, что при наличии большого количества данных может нагрузить сервер. Так что применять с аккуратностью.
P.S. Решение в комментариях (от @Akina) считаю гораздо лаконичнее и лучше.
SELECT
*
FROM `influence-zone`
JOIN users ON `influence-zone`.country IN (users.country, "ALL")