我在获取另一个表行上使用的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 ALL
articles
表和video
表作为子查询,然后使用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
关于mysql - 如何计入多个表格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51186375/