Как сделать 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")

Посмотреть можете тут

→ Ссылка