Ну по какой-то причине MySQL не поддерживает подзапросы в View.Я застрял с использованием MySQL для обозримого будущего, и мне нужно написать View для агрегирования данных из таблицы в стиле EAV в более читаемый формат.Само представление будет выступать в качестве модели для приложения на основе Ruby on Rails (оно доступно только для чтения, поэтому я могу безопасно использовать представление).
Как я могу, если вообще могу, переписать этозверь, чтобы иметь возможность создать вид из него?Я полагаю, что если бы мне пришлось, я мог бы просто создать серию мини-видов, а затем один главный вид (один вид, чтобы управлять ими всеми, в зависимости от обстоятельств), но мне интересно, есть другой способ.
Вот монстр;большое количество внешних объединений объясняется тем, что все поля являются необязательными, но мне нужно отобразить все столбцы:
select ls.subscriberid as id, l.name as list_name,
ifnull(cfn.first_name, '') as first_name,
ifnull(cln.last_name, '') as last_name,
ifnull(ce.email_address, '') as email_address,
ifnull(cm.mobile_phone, '') as mobile_phone
from (
select ls.subscriberid, ifnull(s.data, '') as first_name
from subscribers_data s
right outer join list_subscribers ls on ls.subscriberid = s.subscriberid
where s.fieldid = 2 /* First Name */
) cfn
right outer join (
select ls.subscriberid, ifnull(s.data, '') as last_name
from subscribers_data s
right outer join list_subscribers ls on ls.subscriberid = s.subscriberid
where s.fieldid = 3 /* Last Name */
) cln on cfn.subscriberid = cln.subscriberid
right outer join (
select ls.subscriberid, ls.emailaddress as email_address
from list_subscribers ls
) ce on ce.subscriberid = cfn.subscriberid
right outer join (
select ls.subscriberid, ifnull(s.data, '') as mobile_phone
from subscribers_data s
right outer join list_subscribers ls on ls.subscriberid = s.subscriberid
where s.fieldid = 81 /* Mobile Phone */
) cm on cm.subscriberid = cfn.subscriberid
right outer join list_subscribers ls on ls.subscriberid = cfn.subscriberid
inner join lists l on ls.listid = l.listid