2017-05-16 5 views
0

account_info、gang_info、gang_join_infoの3つのテーブルがあります。私が欲しいJOIN 3テーブルでCOUNT()を使用する方法

`account_info`: 

u_id name   g_id 
--------------------------------- 
1  Philip   1 
2  John   2 

`gang_info`: 

g_id g_name   g_color 
--------------------------------- 
1  U2    37497 
2  The Invicibles 1517 

`gang_join_info`: 

p_id  g_id  a_id  t_id 
--------------------------------- 
1   1   4   1493894713 --gang founder 
1   2   2   1493894714 
1   2   3   1493894713 
1   2   3   1493894715 
2   1   2   1494158866 
2   2   4   1494834912 --gang founder 

結果は次のとおりです。

g_id g_color FROM_UNIXTIME(gj.t_id, '%d %m %Y') g_members a_id name  g_name 
--------------------------------- 
1  37497 04 05 2017       1   4  Philip  U2 
2  1517  15 05 2017       1   4  John  The Invicibles 

私のクエリは、私がgang_infoからの暴力団情報を必要とするこのクエリでは

SELECT g.g_id 
    , g.g_color 
    , FROM_UNIXTIME(gj.t_id, '%d %m %Y') 
    , gj.a_id 
    , name 
    , g_name 
    FROM gang_info g 
    JOIN gang_join_info gj 
    ON g.g_id = gj.g_id 
    JOIN account_info a 
    ON a.u_id = gj.p_id 
HAVING gj.a_id = 4 

で、ギャングの作成時刻フィールドA_ID = 4とgang_join_infoから、 account_infoの創始者の名前を暴く既に私は質問をしていますが、私はギャングメンバーの量が必要です。ギャングのメンバーの量は良い返しますが、ギャングのデータが間違っている、私はこのクエリに

 
SELECT g.g_id, g_color, COUNT(a.g_id) AS g_members, FROM_UNIXTIME(t_id, '%d %m %Y'), a.name, g_name FROM gang_info g JOIN account_info a ON g.g_id = a.g_id JOIN gang_join_info gj ON g.g_id = gj.g_id AND gj.a_id = 4 

を試みたが、それは動作しません。これは1つのクエリで可能ですか?

編集:

最後に私はサブクエリが必要でした。ここで働いてクエリは次のとおりです。

SELECT g.g_id, g.g_color, (SELECT COUNT(*) FROM account_info a WHERE a.g_id = g.g_id) AS g_members, gj.a_id, FROM_UNIXTIME(gj.t_id, '%d %m %Y'), a.name, g.g_name 
FROM gang_join_info gj 
JOIN gang_info g ON gj.g_id = g.g_id 
JOIN account_info a ON gj.p_id = a.u_id 
HAVING gj.a_id = 4 AND g_members != 0 
+0

回答がある場合は、答えとして投稿してください。 – IllidanS4

答えて

0

あなたはgroup by句を追加するために必要な:

SELECT g.g_id, g_color, COUNT(a.g_id) AS g_members, FROM_UNIXTIME(t_id, '%d %m %Y'), a.name, g_name 
FROM gang_info g 
JOIN account_info a ON g.g_id = a.g_id 
JOIN gang_join_info gj ON g.g_id = gj.g_id AND gj.a_id = 4 
GROUP BY 1,2,4,5,6 -- list all non-aggregated column numbers 

MySQLの(単独)はgroup byを許可ませんが、その場合の挙動は、あなたが望むものではありません。

関連する問題