@basida4207

Как переделать запрос для получения нужного ответа?

Имеется две таблицы, city и country.

DESCRIBE city;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| cid    | int(11)      | NO   |     | NULL    |                |
| name   | varchar(255) | NO   |     | NULL    |                |
| salary | float        | NO   |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
4 rows in set (0.000 sec)


где cid - id страны, name - название, salary - средняя зарплата по сотрудникам

DESCRIBE country;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| name    | varchar(255) | NO   |     | NULL    |                |
| is_here | tinyint(4)   | NO   |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.000 sec)


где name - название, is_here - регион присутствия

В данный момент использую такой запрос:
SELECT
city.id,
city.name,
country.name,
salary,
country.is_here
FROM city
LEFT JOIN country ON city.cid = country.id
GROUP BY city.id


На что получаю
+----+-----------+-------+--------+---------+
| id | name      | name  | salary | is_here |
+----+-----------+-------+--------+---------+
|  1 | Madrid    | Spain |   4720 |       0 |
|  2 | Barcelona | Spain |   3000 |       0 |
|  3 | Rome      | Italy |   5000 |       1 |
+----+-----------+-------+--------+---------+
3 rows in set (0.000 sec)


Что хотелось бы? Там, где региона присутствия нет, "имитировать" его и добавлять к зарплате +2000 у.е
+----+-----------+-------+--------+---------+
| id | name      | name  | salary | is_here |
+----+-----------+-------+--------+---------+
|  1 | Madrid    | Spain |   4720 |       0 |
|  2 | Barcelona | Spain |   3000 |       0 |
|  1 | Madrid    | Spain |   6720 |       1 |
|  2 | Barcelona | Spain |   5000 |       1 |
|  3 | Rome      | Italy |   5000 |       1 |
+----+-----------+-------+--------+---------+
5 rows in set (0.000 sec)
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
@alexalexes
Как-то, так.
SELECT
city.id,
city.name,
country.name,
salary,
country.is_here
FROM city
LEFT JOIN country ON city.cid = country.id
union all
SELECT
city.id,
city.name,
country.name,
salary + 2000,
1
FROM city
LEFT JOIN country ON city.cid = country.id
where (country.id is null or country.is_here = 0)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы