2013-04-04 3 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 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; 

См SQL Fiddle with Demo

Я выбрал LEFT JOIN так что вы будете вернуть все строки из таблицы servers, даже если нет соответствующей строки в подзапроса.

+0

Это работает отлично. Спасибо! – user2246993

+0

@ user2246993 Добро пожаловать, рад помочь! – Taryn

Смежные вопросы