Mysql 匹配列
我想知道是否有一种方法可以显示一组匹配的或不同的数据。。比如说,我有三张桌子Mysql 匹配列,mysql,sql,Mysql,Sql,我想知道是否有一种方法可以显示一组匹配的或不同的数据。。比如说,我有三张桌子 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 |a
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 |
问题是我不知道在这个场景中使用什么方法,我使用了这个查询a完全连接
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列中显示数据
非常感谢:)这是一个简单的
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
您应该
UNION
这三个表,并执行groupby
以删除重复项:
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
这不是最优雅的解决方案,但您是否希望这样做?(假设语法正确……目前无法测试):
为什么在所有3个表之间进行简单的并集就可以得到所需的结果时进行内部查询?非常感谢您的回复,一旦您将别名添加到select语句中,如
select*FROM(…)作为ip顺序,这同样有效。isp
…非常感谢:):)非常感谢appreciated@agarhy就性能而言,内部查询在这里没有什么区别,但我觉得联合体末尾的ORDERBY子句使意图更加明确clear@nawfal我明白你的意思。我只是好奇语法而不是性能的选择。哦P谢谢你指出…我想一切都变得复杂了,n错过了这些解决方案,非常感谢:)非常感谢你的回答:)是的,一旦我在外部选择中添加别名,你的也会给出我需要的输出:)非常感谢:)
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
SELECT * FROM ((SELECT * FROM tbl_1) UNION (SELECT * FROM tbl_2) UNION (SELECT * FROM tbl_3)) ORDER BY isp DESC, infection DESC;