我有一个查询,该查询从另一个表进行计数,然后为结果添加一列。然后,我需要基于此更改原始的选择结果,但被告知未知列。
例如下面的查询对主查询中的另一个表进行计数,结果命名为shares,我需要基于该列是否大于0来过滤主查询结果集,但是我得到了错误 unknown column shares
select b.name, event_title, ue.event_vis, event_date,
(select count(*) from list_shares
where user_id = 63 and event_id=ue.user_event_id) as shares,
(DAYOFYEAR(ue.event_date) - DAYOFYEAR(CURDATE())) as days
FROM brains b
join user_events ue on b.user_id=ue.user_id
where b.user_id=63 and ((ue.event_vis='Public') OR (shares>0))
and MOD(DAYOFYEAR(ue.event_date) - DAYOFYEAR(CURDATE()) + 365, 365) <= 30
order by days asc
有没有办法做到这一点?
我建议使用派生表来传递汇总值并将其加入,就像使用“ physscal”表一样。例子:
select
b.name,
ue.event_title,
ue.event_vis,
ue.event_date,
tmp.shares,
(DAYOFYEAR(ue.event_date) - DAYOFYEAR(CURDATE())) as days
from
brains b join user_events ue on b.user_id = ue.user_id
left join (
select
ls.user_id,
ls.event_id,
count(*) as shares
from
list_shares ls
group by
ls.user_id,
ls.event_id) tmp on b.user_id = tmp.user_id and ue.user_event_id = tmp.event_id
where
b.user_id = 63
and
((ue.event_vis = 'Public') OR (tmp.shares > 0))
and
MOD(DAYOFYEAR(ue.event_date) - DAYOFYEAR(CURDATE()) + 365, 365) <= 30
order by
days asc
请注意“左联接”。因为您在where子句中使用OR运算符,在我看来,您似乎也希望获得没有共享的行。
当然,您也可以在where子句中使用相同的子选择,但这是重复的代码,难以维护。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句