用subselect替换select中的列名

时间:2016-09-11 10:48:04

标签: mysql

在我的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)

但是,这在语法上是不正确的。该如何制定?

1 个答案:

答案 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 |
+----+---------+----------+