我有以下查询:MySQL的 - 有条件加入了列
select ad_st_id_state, count(distinct id_visit) as Visits
from sf_visit
join vr_users on vi_us_id_user = sus_us_id_user
join sf_pdv on vi_pdv_id_pdv = id_pdv
join sf_address on pdv_ad_id_address = id_address
group by ad_st_id_state
order by ad_st_id_state
,我也有这样的一个:
正如你所看到的查询是几乎除了同一个额外的join
声明。 两个查询返回我,我需要正确的价值观,但我需要他们一起在一个单一的表,所以我这样做:
select fffuuu.ad_st_id_state, count(distinct id_visit) as Visitas, fffuuu.doneVisits
from sf_visit
join vr_users on vi_us_id_user = sus_us_id_user
join sf_pdv on vi_pdv_id_pdv = id_pdv
join sf_address on pdv_ad_id_address = id_address
join (
select ad_st_id_state, count(distinct id_visit) as doneVisits
from sf_visit
join vr_users on vi_us_id_user = sus_us_id_user
join sf_pdv on vi_pdv_id_pdv = id_pdv
join sf_address on pdv_ad_id_address = id_address
join sf_visit_file_time on id_visit = vft_vi_id_visit
group by ad_st_id_state
order by ad_st_id_state
) as fffuuu on sf_address.ad_st_id_state = fffuuu.ad_st_id_state
group by ad_st_id_state
order by ad_st_id_state
或者换句话说,我加入了第一个查询与第二个作为子查询。结果集很好而且正确,但花费的时间太长,所以我在这个查询正在运行的另一个系统中出现超时。 每个查询独立运行速度快,但加入他们是太慢我的需求...
我想知道是否有一种方法来优化这个,我想如果有一些联合条件语句或某事。我搜索了信息,但我没有任何运气。 我在想像这样的东西:
select ad_st_id_state, count(distinct id_visit) as Visits, if(@someVariable := true) as DoneVisits
from sf_visit
join vr_users on vi_us_id_user = sus_us_id_user
join sf_pdv on vi_pdv_id_pdv = id_pdv
join sf_address on pdv_ad_id_address = id_address
if (@someVariable == true) then join sf_visit_file_time on id_visit = vft_vi_id_visit
group by ad_st_id_state
order by ad_st_id_state
或类似的东西。请问一些身体可以帮我吗?我怎样才能优化这个? 感谢
在T-SQL下工作,是使我确定这将在MySQL工作太添加加入像....上id_visis = vft_vi_id_visit和@someVariable = 1个 – SkelDave 2014-11-03 19:59:21
@SkelDave JOIN sf_visit_file_time我想你的建议,但我不知道该怎么做,因为我在MySQL中遇到了语法错误。我只是编写了关于someVariable的代码来阐明我想要做的事情。 – Metafaniel 2014-11-03 20:07:14