Surzhikov
@Surzhikov
Разработчик

Как сделать View с переопределением одного поля?

Добрый день!
Подскажите, пожалуйста, как создать вот такой view в MySQL?

Сочинил пример, который похож на мою задачу. Предположим есть две таблицы: users (пользователи) и tariffs (тарифы), которые связаны через users.tariff_id. Для каждого пользователя может быть определен тариф, а может быть определена сразу цена.

users - пользователи
| id | name      | tariff_id | price |
 -----------------------------------
|  1 | Иванов И. |         1 |  NULL |
 -----------------------------------
|  2 | Петров П. |         2 |  NULL |
 -----------------------------------
|  3 | Яков С.   |         1 |  1000 |
 -----------------------------------
|  4 | Кузин Н.  |      NULL |  NULL |
 -----------------------------------
|  5 | Жмерин Е. |      NULL |  5000 |
 -----------------------------------


tariffs - тарифы
| id | price |
 ------------
|  1 |  8000 |
 ------------
|  2 | 12000 |
 ------------


Нужно создать вот такой View для таблицы пользователей:
чтобы приоритет был у цены, которая напрямую указана (переопределна) в users
Если цена (users.price) не указана, взять цену из traiffs.
Если и тариф не указан - NULL

user_price
| id | name      | price |
 ------------------------
|  1 | Иванов И. |  8000 | (взято из tariffs.price)
 ------------------------
|  2 | Петров П. | 12000 | (взято из tariffs.price)
 ------------------------
|  3 | Яков С.   |  1000 | (взято из users.price)
 ------------------------
|  4 | Кузин Н.  |  NULL | 
 ------------------------
|  5 | Жмерин Е. |  5000 | (взято из users.price)
 ------------------------
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
@Arik
Как нибудь так?
SELECT *, IFNULL(`price`, (SELECT `price` FROM `tariffs` AS b WHERE b.`id` = a.`tariff_id` LIMIT 1)) as `price` FROM `users` AS a
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы