1

我需要在一个中返回两个查询的结果。我读过其他帖子,不确定这是否应该是内部连接。

我想要这两个查询:

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                 |
+----+------------+---------+------------+-------------------+

有人可以帮我理解如何做到这一点吗?我觉得这是一个内部连接,但是我不确定我是否完全理解这个概念..

4

1 回答 1

1

您可以使用子查询来获取returncode每个服务器的计数,然后使用表LEFT JOINservers获取结果:

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;

请参阅带有演示的 SQL Fiddle

我选择了一个,因此即使子查询中没有匹配的行,LEFT JOIN您也会从表中返回所有行。servers

于 2013-04-04T23:04:17.683 回答