2016-05-12 2 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

v_pに含まれていないs_xまたはs_dオカレンスがありますか? –

答えて

0

私はあなたがこれを見ていると信じて:。

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を持っている:nは、少なくとも2との間の関係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 
関連する問題