gpt4 book ai didi

mysql - 返回MySQL中一个表的id出现在另一个表中的次数(包括0次)

转载 作者:行者123 更新时间:2023-11-29 12:21:00 24 4
gpt4 key购买 nike

我有 2 个表,想要查找第一个表(标签)中的 id 在另一个表(article_labels)中出现的次数,以及当它没有出现时的次数(我希望它在没有出现时返回 0) t)。我使用 MySQL 和 PHP。我更喜欢只涉及 MySQL 的解决方案。

表格是:

LABELS (table 1)
+--+---------------+
|ID|EN |
+--+---------------+
|1 |"Artert" |
+--+---------------+
|2 |"Heart" |
+--+---------------+
|3 |"Brain" |
+--+---------------+


ARTICLE_LABELS (table 2)
+--+------------+
|ID|LABELID |
+--+------------+
|1 |2 |
+--+------------+
|2 |1 |
+--+------------+
|3 |1 |
+--+------------+
|4 |1 |
+--+------------+
|5 |2 |
+--+------------+

我有一个运行良好的查询,但我希望结果集中有一行,即使标签表中的 id 没有出现在article_labels 表中(如上面标签表中 id 3 的情况)。

我当前的查询是:

SELECT labels.id, en, COUNT( * ) AS used
FROM article_labels
LEFT JOIN labels ON labelid = labels.id
GROUP BY labelid

这将返回:

+--+---------------+
|ID|EN |USED |
+--+---------------+
|1 |Artery | 3 |
+--+---------------+
|2 |Heart | 2 |
+--+---------------+

但正如预期的那样,它不会在结果集中显示 labels.id 3,因为它没有出现在article_labels 表中。但我不想要一个查询也从标签表中返回“id = 3”和“en = Brain”,即使它没有出现在article_labels表中(结果如下所示):

+--+---------------+
|ID|EN |USED |
+--+---------------+
|1 |Artery | 3 |
+--+---------------+
|2 |Heart | 2 |
+--+---------------+
|3 |Brain | 0 |
+--+---------------+

有什么建议吗?

最佳答案

您需要RIGHT JOIN而不是LEFT JOIN(或者交换连接表的顺序);您还需要命名要计数的列,因为您希望从连接中排除那些 NULL 记录:

SELECT   l.id, COUNT(al.labelid) AS used
FROM article_labels al RIGHT JOIN labels l ON al.labelid = l.id
GROUP BY l.id

或者

SELECT   l.id, COUNT(al.labelid) AS used
FROM labels l LEFT JOIN article_labels al ON al.labelid = l.id
GROUP BY l.id

sqlfiddle 上查看它们.

参见A Visual Explanation of SQL Joins了解更多信息。

关于mysql - 返回MySQL中一个表的id出现在另一个表中的次数(包括0次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com