Как получить количество определенных строк из другой таблицы в подзапросе - PullRequest
2 голосов
/ 27 января 2010

Я знаю, что это возможно, но я недостаточно опытен, чтобы знать, как выполнять подзапросы.
Вот ситуация:

Table 1:
+--------------------+--------------------+
|               v_id |             v_name |
+--------------------+--------------------+
|                  1 |            v_name1 |
+--------------------+--------------------+
| etc...

Table 2:
+--------------------+--------------------+
|               a_id |             a_name |
+--------------------+--------------------+
|                  1 |            a_name1 |
+--------------------+--------------------+
| etc...

Table 3:
+--------------------+--------------------+
|               v_id |               a_id |
+--------------------+--------------------+
|                  1 |                  1 |
+--------------------+--------------------+
|                  1 |                  2 |
+--------------------+--------------------+
|                  1 |                  3 |
+--------------------+--------------------+
|                  2 |                  3 |
+--------------------+--------------------+
|                  2 |                  1 |
+--------------------+--------------------+

Я считаю, что это довольно распространенная ситуация.
Итак, у меня есть уникальные записи в Table 1 и Table 2.
Я хочу SELECT всех строк из Table 1 и получить (как последняя ячейка в каждой строке) количество строк с соответствующим значением в Table 3.

Это не работает:

SELECT t1.* , COUNT(SELECT t3.* FROM  `table_3` t3 WHERE t3.v_id = t1.v_id) as entries
FROM  `table 1` t1;

Я уверен, что здесь мне скажут эксперты, что все неправильно, но, честно говоря, это то, что я ищу (и какое-то полезное решение!) ;)

Ответы [ 3 ]

4 голосов
/ 27 января 2010

Использование:

   SELECT t1.*,
          COALESCE(x.num_rows, 0) AS entries
     FROM `table 1` t1
LEFT JOIN (SELECT t3.v_id,
                  COUNT(*) 'num_rows'
             FROM `table_3` t3
         GROUP BY t3.v_id) x ON x.v_id = t1.v_id
3 голосов
/ 27 января 2010
SELECT t1.* , (SELECT COUNT(*) FROM  `table_3` t3 WHERE t3.v_id = t1.v_id) as t3Count as entries 
FROM  `table 1` t1; 
2 голосов
/ 27 января 2010
SELECT T1.v_id, COALESCE(COUNT(T3.v_id), 0)
FROM Table1 AS T1
LEFT JOIN Table3 AS T3
ON T1.v_id = T3.v_id
GROUP BY T1.v_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...