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 i need-
ip  |isp    |infection
----------------------
1   |aaaa   |malware
1   |aaaa   |ddos
2   |bbbb   |malware
2   |bbbb   |other
3   |cccc   |ddos
3   |cccc   |trojan
4   |dddd   |ddos
4   |dddd   |trojan
5   |eeee   |trojan
6   |ffff   |other
6   |ffff   |

問題は、このシナリオに使用する方法がわからないことです。このクエリを使用しましたfull join

SELECT a. * , b. * , c. *
FROM tbl_1 a
LEFT OUTER JOIN tbl_2 b
USING ( ip, isp, infection )
LEFT OUTER JOIN tbl_3 c
USING ( ip, isp, infection )
UNION
SELECT a. * , b. * , c. *
FROM tbl_2 b
LEFT OUTER JOIN tbl_1 a
USING ( ip, isp, infection )
LEFT OUTER JOIN tbl_3 c
USING ( ip, isp, infection )
UNION
SELECT a. * , b. * , c. *
FROM tbl_3 c
LEFT OUTER JOIN tbl_1 a
USING ( ip, isp, infection )
LEFT OUTER JOIN tbl_2 b
USING ( ip, isp, infection )

しかし、これは別の方法で結果をもたらします。

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

これについて私を助けてください、私は3列だけでデータを表示したい..

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

4

4 に答える 4

3

これは簡単ですUNION

SELECT ip, isp, infection FROM tbl_1
UNION
SELECT ip, isp, infection FROM tbl_2
UNION
SELECT  ip, isp, infection FROM tbl_3
ORDER BY IP

SQLFiddle デモ

于 2012-10-26T06:27:33.790 に答える
1
SELECT * 
FROM   (
        SELECT * FROM tbl_1 
        UNION 
        SELECT * FROM tbl_2 
        UNION 
        SELECT * FROM tbl_3
       ) AS t
ORDER BY ip, isp
于 2012-10-26T06:27:45.983 に答える
1

UNION3 つのテーブルを使用しGROUP BYて、重複を削除する必要があります。

SELECT ip, isp, infection 
FROM tbl_1

UNION

SELECT ip, isp, infection 
FROM tbl_2

UNION

SELECT  ip, isp, infection 
FROM tbl_3

GROUP BY ip, isp, infection

ORDER BY IP
于 2012-10-26T06:31:45.527 に答える
1

これは最も洗練されたソリューションではありませんが、このような方法でうまくいくでしょうか? (構文が正しいと仮定すると...現時点ではテストできません):

SELECT * FROM ((SELECT * FROM tbl_1) UNION (SELECT * FROM tbl_2) UNION (SELECT * FROM tbl_3)) ORDER BY isp DESC, infection DESC;
于 2012-10-26T06:34:43.703 に答える