Обновление значений в представлении MySQL

0

Предположим, что у нас есть эти таблицы:

События

id | name  | time      | action | entered
---+-------+-----------+--------+--------
 1 | james | today     | x      |
 1 | james | today     | x      | yes
 1 | james | today     | y      |
 1 | james | today     | y      | yes
 2 | carl  | today     | x      | 
 2 | carl  | today     | y      |
 3 | casey | yesterday | x      |
 3 | casey | yesterday | x      | yes
 3 | casey | yesterday | y      |
 3 | casey | yesterday | y      | yes
 4 | john  | today     | x      | yes

пользователи

name  | email        |   
------+--------------+
james | james@email  |   
casey | casey@email  |

Могу ли я создать представление, которое дает следующее:

EventsView

id | name        | time      | action | entered
---+-------------+-----------+--------+--------
 1 | james@email | today     | x      |
 1 | james@email | today     | x      | yes
 1 | james@email | today     | y      |
 1 | james@email | today     | y      | yes
 2 | carl        | today     | x      | 
 2 | carl        | today     | y      |
 3 | casey@email | yesterday | x      |
 3 | casey@email | yesterday | x      | yes
 3 | casey@email | yesterday | y      |
 3 | casey@email | yesterday | y      | yes
 4 | john        | today     | x      | yes

То есть, я хочу видеть имена пользователей, для которых у меня есть электронная почта, а не по электронной почте, а не по имени. Возможный?

Теги:
database

1 ответ

1

Один из способов добиться этого - использовать left join вместе с функцией coalesce, которая вернет первое ненулевое значение своих аргументов. Как это:

select 
  e.id, coalesce(u.email, e.name) name, e.time, e.action, e.entered
from events e 
left join users u on e.name = u.name

Живой пример с представлением.

  • 0
    это похоже на работу! Я собираюсь проверить мой набор данных с этим. Однако я заметил, что это очень эффективно, для большого набора данных, правильно? Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню