我在获取另一个表行上使用的ID时遇到问题。我有三张桌子。一个是分类,文章,视频。在文章和视频中,有一列具有类别ID。下面是示例:
表类别:

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

我想得到每个类别的ID已经使用了另外两个数据库中的时间。这样地:
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

我需要使用什么查询才能获得所有这样的数据?求求你,任何人都知道能帮我。提前谢谢。

最佳答案

首先需要将UNION ALLarticles表和video表作为子查询,然后使用Outer joinCOUNT函数。

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

关于mysql - 如何计入多个表格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51186375/

10-11 21:39