2012-02-28 16 views
0

テーブルがありますtable_one, table_two, table_three, table_fourすべての構造はほぼ同じです。 列にはid, name, status, user_idがあります。多くのテーブルからのMySQLリクエスト数

i.g.私はuser_id 345のユーザージョンをtable_fourを除くすべてのテーブルに複数回持ちます。いくつかのエントリのstatusは1で、他のエントリは0です

ここでは、このユーザのステータスがこのテーブルのそれぞれで1だったクエリを1つカウントする必要があります。

だから私はやる:私はちょうどSUM(CASE WHEN table_one.status = 1 THEN 1 ELSE 0 END) AS count_tbloneままにした場合、それは2、1、1、0

あるべきとき

SELECT table_one.user_id, 
    SUM(CASE WHEN table_one.status = 1 THEN 1 ELSE 0 END) AS count_tblone 
    SUM(CASE WHEN table_two.status = 1 THEN 1 ELSE 0 END) AS count_tbltwo 
    SUM(CASE WHEN table_three.status = 1 THEN 1 ELSE 0 END) AS count_tblthree 
    SUM(CASE WHEN table_four.status = 1 THEN 1 ELSE 0 END) AS count_tblfour 
FROM table_one 
    LEFT JOIN table_one ON table_one.user_id = table_one.user_id 
    LEFT JOIN table_two ON table_two.user_id = table_one.user_id 
    LEFT JOIN table_three ON table_three.user_id = table_one.user_id 
    LEFT JOIN table_four ON table_four.user_id = table_one.user_id 

WHERE tbl_one.user_id = 345 

問題は、その要求出力4、0、0、0である - count_tblone意志をユーザ345の2つのレコードでtable_one - statusのフィールドが1に等しい場合でも4になります。

+1

機能していませんか?また、 'LEFT JOIN'の中で' = tbl_resume.candidate_id'を使うことを意味しましたか? – Edward

+0

申し訳ありません、私は今それを修正しました。 – JohnA

+0

それぞれのテーブルは、独自のキーで結合していますが、これは意味をなさないものです。私の考えは、あなたはtable_oneからtable_twoへ、table_twoからtable_threeへ、table_threeからtable_fourへの参加が残っているということです。私が間違っている場合は私を修正してください。 –

答えて

0

これはもっとタイピングですが、特にユーザーがtable_oneに属していない場合は、UNION をお勧めします。

SELECT 
    SUM(count_tblone) AS count_tblone, 
    SUM(count_tbltwo) AS count_tbltwo, 
    SUM(count_tblthree) AS count_tblthree, 
    SUM(count_tblfour) AS count_tblfour 
FROM (
    SELECT 
     SUM(CASE WHEN table_one.status = 1 THEN 1 ELSE 0 END) AS count_tblone, 
     0 AS count_tbltwo, 
     0 AS count_tblthree, 
     0 AS count_tblfour 
    FROM table_one 
    WHERE tbl_one.user_id = 345 
    UNION 
    SELECT 
     0 AS count_tblone, 
     SUM(CASE WHEN table_two.status = 1 THEN 1 ELSE 0 END) AS count_tbltwo, 
     0 AS count_tblthree, 
     0 AS count_tblfour 
    FROM table_two 
    WHERE tbl_one.user_id = 345 
    UNION 

...テーブル3と4 ...

) AS tblMyUnionedTables 
+0

さらに、4列の行ではなく、4列の行として結果を取り出すことができれば、 '0 AS count_tbl ... '項目を取り出すことができます。上の答えのサブテーブルになりました。その場合、UNIONの代わりにUNION ALLが必要であることに注意してください。この場合も、 'status = 1'をwhere節の中に追加してカウントを取得することができます。 –

関連する問題