1

好奇心から、2つ以上のテーブルで一致するデータの数を取得できる方法はありますか..のように、次の3つのテーブルを取得した場合、

tbl_1-
ip  |isp    |infection
----------------------
1   |aaaa   |malware
2   |bbbb   |malware
3   |cccc   |ddos
3   |cccc   |trojan
4   |dddd   |ddos

tbl_2-
ip  |isp    |infection
----------------------
1   |aaaa   |malware
3   |cccc   |ddos
4   |dddd   |trojan
5   |eeee   |trojan
6   |ffff   |other

tbl_3-
ip  |isp    |infection
----------------------
1   |aaaa   |ddos
6   |ffff   |
2   |bbbb   |other

以下に示すような答えを導き出すことができますか??

Result-
ip  |isp    |infection  |Match Count
------------------------------------
1   |aaaa   |malware    |2      
1   |aaaa   |ddos       |1      
2   |bbbb   |malware    |1
2   |bbbb   |other      |1
3   |cccc   |ddos       |2
3   |cccc   |trojan     |1
4   |dddd   |ddos       |1
4   |dddd   |trojan     |1
5   |eeee   |trojan     |1
6   |ffff   |other      |1
6   |ffff   |           |1

ありがとうございました :)

4

3 に答える 3

5

重複を許可するには、UNION ALLUNION のみではなく)使用する必要があります

SELECT ip, isp, infection, COUNT(*)
FROM 
(
SELECT ip, isp, infection FROM tbl_1
UNION ALL
SELECT ip, isp, infection FROM tbl_2
UNION ALL
SELECT  ip, isp, infection FROM tbl_3
) x
GROUP BY ip, isp, infection

SQLFiddle デモ

于 2012-10-26T08:51:50.957 に答える
2

3 つのテーブルすべての UNION ALL を実行してから、ip、isp、infection 列で GROUP BY を実行する必要があります。

SELECT ip, isp, infection, COUNT(*) 'Match Count'
FROM
(
    SELECT * FROM tbl_1
    UNION ALL
    SELECT * FROM tbl_2
    UNION ALL
    SELECT * FROM tbl_3
) AS A
GROUP BY ip, isp, infection
于 2012-10-26T08:49:26.433 に答える
0

はい、COUNT() 関数を使用できます http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count

于 2012-10-26T08:50:25.340 に答える