2016-05-12 52 views
0

我試圖執行跨多個,鏈接表計數:MySQL的 - 跨表計數

select 
    vpp.Name 
    ,count(sx.Occurences) as sx_Occurences 
    ,count(vpp.Occurences) as vpp_Occurences 
    ,count(sd.Occurences) as sd_Occurences 
from v_p vpp 
    left outer join s_x sx on sx.ID = vpp.ID 
    left outer join s_d sd on sd.ID = vpp.ID 
    group by vpp.Name 

但是這給了我不正確的結果(在一個表上做一個只計數正常,但只要我添加第二個(或第三,第四......)的數字是錯誤的

+0

難道是您有s_x或s_d事件不在v_p中? –

回答

0

我相信你正在尋找這樣的:的至少2 n之間的關係:

SELECT vpp.Name, 
     (SELECT count(sx.Occurences) FROM s_x WHERE s_x.ID = vpp.ID) as sx_Occurences, 
     count(vpp.Occurences) as vpp_Occurences, 
     (SELECT count(sd.Occurences) FROM s_d WHERE s_d.ID = vpp.ID) as sd_Occurences 
    FROM v_p vpp 
GROUP BY vpp.Name; 
0

你可能有1 3張桌子他的結果是你將有更多的記錄,如果你按照每張表格單獨記錄記錄的話,你會得到更多的記錄。

如果要算定域的不同值,然後使用計數(不同的...):

select 
    vpp.Name 
    ,count(distinct sx.Occurences) as sx_Occurences 
    ,count(distinct vpp.Occurences) as vpp_Occurences 
    ,count(distinct sd.Occurences) as sd_Occurences 
from v_p vpp 
    left outer join s_x sx on sx.ID = vpp.ID 
    left outer join s_d sd on sd.ID = vpp.ID 
    group by vpp.Name 

否則,你需要做的每個表單獨計數。您可以將3個查詢合併爲子查詢:

select 
    t1.Name 
    ,sx_Occurences 
    ,vpp_Occurences 
    ,sd_Occurences 
from 
    (select name, id, count(vpp.Occurences) as vpp_Occurences 
    from v_p vpp 
    group by name, id) t1 
    left outer join 
    (select id, count(sx.Occurences) as sx_Occurences 
    from s_x sx 
    group by id) t2 on t1.ID = t2.ID 
    left outer join 
    (select id, count(sd.Occurences) as sd_Occurences 
    from s_d sd 
    group by id) t3 on t1.ID = t3.ID