在我的mysql数据库中,我有两个表,project和sub_project。 子项目包含id和首字母缩略词;子项目有一个project_id,它告诉它属于哪个主项目。数据库如下所示:
s/\(jdbc-uri *= *\).*/\1"jdbc:mysql:\/\/xxxx"/g
s/\(jdbc-password *= *\).*/\1"xxxx"/g
s/\(jdbc-username *= *\).*/\1"xxxx"/g
我想创建一个查询,显示每个项目的id和首字母缩略词,以及子项目的数量,如下所示:
mysql> SELECT id, acronym FROM project;
+----+---------+
| id | acronym |
+----+---------+
| 14 | P1 |
| 15 | P2 |
| 16 | P3 |
+----+---------+
3 rows in set (0.00 sec)
mysql> SELECT id, project_id FROM subproject;
+----+------------+
| id | project_id |
+----+------------+
| 1 | 14 |
| 2 | 14 |
+----+------------+
2 rows in set (0.00 sec)
但是,这在语法上是不正确的。该如何制定?
答案 0 :(得分:2)
架构:
create table project
( id int not null,
acronym varchar(100) not null
);
insert project values
(14,'P1'),
(15,'P2'),
(16,'P3');
create table subproject
( id int not null,
project_id int not null
);
insert subproject values
(1,14),
(2,14);
具有子项目的项目:
select p.id,p.acronym,count(s.id) as theCount
from project p
join subproject s
on s.project_id=p.id
group by p.id,p.acronym;
+----+---------+----------+
| id | acronym | theCount |
+----+---------+----------+
| 14 | P1 | 2 |
+----+---------+----------+
所有项目甚至没有子项目的项目:
select p.id,p.acronym,count(s.id) as theCount
from project p
left join subproject s
on s.project_id=p.id
group by p.id,p.acronym;
+----+---------+----------+
| id | acronym | theCount |
+----+---------+----------+
| 14 | P1 | 2 |
| 15 | P2 | 0 |
| 16 | P3 | 0 |
+----+---------+----------+