我有一个id值表,需要计算每个id在另一个表的列中出现的次数。
我已经知道如何只对至少出现一次的值执行此操作:

SELECT one.id, COUNT(*) FROM table1 one, table2 two WHERE one.id = two.id GROUP BY one.id;

但不知道如何包括第一个表中出现但根本不出现在第二个表中的id。
例子:
table1:       table2:

+-----+      +-----+
| id  |      | id  |
+-----+      +-----+
| 11  |      | 11  |
| 12  |      | 12  |
| 13  |      | 14  |
| 14  |      | 11  |
+-----+      | 11  |
             | 12  |
             +-----+

结果将是:
+-----+----------+
| id  | count(*) |
+-----+----------+
| 11  | 3        |
| 12  | 2        |
| 14  | 1        |
+-----+----------+

我试图使它也包括line| 13 | 0 |

最佳答案

您正在执行一个不受欢迎的隐式内部连接。相反,您需要的是左连接,例如:

SELECT one.id, COUNT(two.id)
FROM table1 one LEFT JOIN table2 two
ON one.id = two.id
GROUP BY one.id;

10-04 12:31
查看更多