我有以下查詢: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