2013-04-04 131 views
1

我需要在一个查询中返回两个查询的结果。我读过其他文章,不知道这是否应该是内部连接。Mysql中的一个查询(内连接?)

我想这两个查询:

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

是否有人可以帮助我了解如何做到这一点?我觉得这是一个内部联接,但是我不知道我理解这个概念,完全..

回答

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 with Demo

我选择了一个LEFT JOIN所以你将返回所有行从表servers即使没有在子查询匹配的行。

+0

这工作完美。谢谢! – user2246993 2013-04-04 23:07:40

+0

@ user2246993不客气,高兴地帮忙! – Taryn 2013-04-04 23:11:05