Предположим, что у нас есть эти таблицы:
События
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
То есть, я хочу видеть имена пользователей, для которых у меня есть электронная почта, а не по электронной почте, а не по имени. Возможный?
Один из способов добиться этого - использовать 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