Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将select中的列名替换为subselect_Mysql - Fatal编程技术网

Mysql 将select中的列名替换为subselect

Mysql 将select中的列名替换为subselect,mysql,Mysql,在我的mysql数据库中,我有两个表,project和sub_project。 子项目包含id和首字母缩略词;子项目有一个project_id,它告诉我们它属于哪个主项目。数据库如下所示: mysql> SELECT id, acronym FROM project; +----+---------+ | id | acronym | +----+---------+ | 14 | P1 | | 15 | P2 | | 16 | P3 | +----+----

在我的mysql数据库中,我有两个表,project和sub_project。 子项目包含id和首字母缩略词;子项目有一个project_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)
我想做一个查询,显示每个项目的id和首字母缩写,以及子项目的数量,如下所示:

SELECT id, acronym, COUNT(select * FROM sub_project WHERE project_id=id) AS 'sub_proj_count'
FROM project;
+----+---------+----------------+
| id | acronym | sub_proj_count |
+----+---------+----------------+
| 14 | P1      | 2              |
| 15 | P2      | 0              |
| 16 | P3      | 0              |
+----+---------+----------------+
然而,这在语法上是不正确的。这应该如何表述?

模式:

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

您可以进行连接并避免缓慢的子查询。但是你的结果是对的,对吗?问题不在于它太慢,而是它给了我一个语法错误,无法工作。也就是说,select语句的打印输出是我想要实现的,而不是我得到的。我会很高兴有一个修复程序能让它基本上按规定工作,即使速度很慢。使用count和group-by进行连接我尝试了使用SELECT project.id,project.acronym,COUNTsubproject.id从项目内部连接project ON project.id=subproject.project\u id;但这只给了我有子项目的项目。我想计算所有项目的计数,即使是那些子项目为零的项目。选择id,缩写,选择count*FROM sub_project,其中project_id=project.id作为“sub_proj_count”FROM project;应该修复您的查询。但我会使用左连接。