联表查询 table_a 和 table_b:
已知:
1.table_a和table_b中有个'time'字段对应。
2.table_a中的一条记录table_b中可能有0~n条记录与之对应。
查询:
table_a中的所有记录,每条记录对应的table_b中的记录数量
table_a:
| id | name | time |
|---|---|---|
| 1 | name1 | 123 |
| 2 | name2 | 456 |
| 3 | name3 | 789 |
table_b:
| id | time | path |
|---|---|---|
| 1 | 123 | /a/b/123a.txt |
| 2 | 123 | /a/b/123b.txt |
| 3 | 123 | /a/b/123c.txt |
| 4 | 456 | /a/b/123c.txt |
想要的查询结果是:
| id | name | time | count(对应table_b中的记录数) |
|---|---|---|---|
| 1 | name1 | 123 | 3 |
| 2 | name2 | 456 | 1 |
| 3 | name3 | 789 | 0 |
SQL 语句如下:
SELECT table_a.id , table_a.name ,table_a.time as time , COUNT(table_b.time) AS count
FROM table_a
LEFT JOIN table_b
ON table_a.time = table_b.time
GROUP BY table_b.time
如果只需要知道table_b中是否有对应记录,而不需要知道具体的数量,那么可以把第一行修改为(添加 DISTINCT ):
SELECT table_a.id , table_a.name ,table_a.time as time,COUNT(DISTINCT table_b.time) AS count
...
注意: GROUP BY 和 COUNT 后面是同一张表的同一个字段
本文介绍了一个具体的联表查询案例,展示了如何使用SQL语句来获取table_a中的所有记录及其在table_b中的对应记录数量。此外,还介绍了如何通过添加DISTINCT关键字来判断table_b中是否存在对应记录。

1021

被折叠的 条评论
为什么被折叠?



