Как я могу считать в нескольких таблицах? - PullRequest
0 голосов
/ 05 июля 2018

У меня возникла проблема с получением идентификатора, который используется в другой строке таблицы. У меня есть три стола. Одним из них является категория, статьи, видео. В статьях и видео есть колонка с идентификатором категории. Вот пример:

Таблица категорий:

id | category_name
------------------
1  | News
2  | Sports
3  | Art
4  | Horror

Таблица статей:

id | category_id | title
----------------------------------
1  | 1           | title content 1
2  | 1           | title content 2
3  | 3           | title content 3
4  | 3           | title content 4
5  | 2           | title content 5

Настольное видео:

id | category_id | video_title
------------------------------
1  | 1           | video title 1
2  | 2           | video title 2
3  | 3           | video title 3

Я хочу, чтобы каждый идентификатор категории уже использовал какое время в двух других базах данных. Как это:

Category ID 1 is use 3 times
Category ID 2 is use 2 times
Category ID 3 is use 3 times
Category ID 4 is use 0 times

Какой запрос мне нужно использовать, чтобы я мог получить все подобные данные? Пожалуйста, кто-нибудь знает, может помочь мне. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Сначала вам нужно UNION ALL articles table и video table быть подзапросом, затем использовать функции Outer join и COUNT.

SELECT Concat('Category ID  ', c.id, ' is use ', Count(t.category_id ), ' times') 
FROM   categories c 
       LEFT JOIN (SELECT category_id 
                  FROM   articles 
                  UNION ALL 
                  SELECT category_id 
                  FROM   video) t 
              ON c.id = t.category_id 
GROUP  BY c.id 

SQLFIDDLE: http://sqlfiddle.com/#!9/92cbd0e/12

[Результаты]

| Concat('Category ID  ', t.id, ' is use ', t.cnt, ' times') |
|------------------------------------------------------------|
|                              Category ID  1 is use 3 times |
|                              Category ID  2 is use 2 times |
|                              Category ID  3 is use 3 times |
|                              Category ID  4 is use 0 times |

Примечание

  • COUNT функция не считает числа, если встречается значение столбца null

Например, вот пример сценария.

CREATE TABLE T(
   col int
);

INSERT INTO T VALUES (NULL);
INSERT INTO T VALUES (1);

SELECT COUNT(col) FROM  t;  -- RESULT  = 1

SELECT COUNT(*) FROM  t;  --RESULT = 2

образец sqlfiddle: http://sqlfiddle.com/#!9/e2bba7/2

0 голосов
/ 05 июля 2018

Вы можете использовать, например, этот запрос:

Select category_id, count(1) - 1
  From (
    Select category_id From video
    Union All Select category_id From articles
    Union All Select id From Categories)
  Group By category_id
...