我需要在一个中返回两个查询的结果。我已阅读其他帖子,我不确定这是否应该是内部联接。
我想要这两个问题:
MariaDB [servers]> select * from servers;
+----+------------+---------+------------+
| id | servername | ip | returncode |
+----+------------+---------+------------+
| 1 | server1 | 0.0.0.0 | 0 |
| 2 | server2 | 0.0.0.0 | 1 |
| 3 | server2 | 0.0.0.0 | 0 |
| 4 | server3 | 0.0.0.0 | 0 |
| 5 | server3 | 0.0.0.0 | 4 |
| 6 | server3 | 0.0.0.0 | 4 |
| 7 | server3 | 0.0.0.0 | 4 |
+----+------------+---------+------------+
MariaDB [servers]> select servername,count(returncode) from servers where returncode<>0 group by servername;
+------------+-------------------+
| servername | count(returncode) |
+------------+-------------------+
| server2 | 1 |
| server3 | 3 |
+------------+-------------------+
这样的事情:
MariaDB [servers]> select ?????????
+----+------------+---------+------------+-------------------+
| id | servername | ip | returncode | count(returncode) |
+----+------------+---------+------------+-------------------+
| 1 | server1 | 0.0.0.0 | 0 | 0 |
| 2 | server2 | 0.0.0.0 | 1 | 1 |
| 3 | server2 | 0.0.0.0 | 0 | 1 |
| 4 | server3 | 0.0.0.0 | 0 | 3 |
| 5 | server3 | 0.0.0.0 | 4 | 3 |
| 6 | server3 | 0.0.0.0 | 4 | 3 |
| 7 | server3 | 0.0.0.0 | 4 | 3 |
+----+------------+---------+------------+-------------------+
有人可以帮我理解怎么做吗?我觉得这是一个内心的联系,但我不确定我完全理解这个概念..
答案 0 :(得分:1)
您可以使用子查询获取每个服务器的returncode
计数,然后使用LEFT JOIN
到servers
表来获取结果:
select s.id, s.servername, s.ip, s.returncode,
coalesce(c.totalcount, 0) TotalCount
from servers s
left join
(
select servername, count(returncode) TotalCount
from servers
where returncode<>0
group by servername
) c
on s.servername = c.servername;
我选择了LEFT JOIN
,因此即使子查询中没有匹配的行,您也会返回servers
表中的所有行。