2016-09-11 6 views
1

私のmysqlデータベースには、2つのテーブルprojectとsub_projectがあります。 サブプロジェクトにはidと頭字語が含まれています。サブプロジェクトには、それが属するメインプロジェクトを示すproject_idがあります。データベースには、次のようになります。selectのカラム名をsubselectに置き換える

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

しかし、これは構文的に間違っている。これはどのように定式化されるべきですか?

+0

あなたが参加し、遅いサブクエリを避けることができません。しかし、あなたの結果は正しい、そうですか? – Drew

+0

問題はそれが遅いということではなく、それは私に構文エラーを与え、うまくいかないということです。私。 select文からの出力は、私が得たいものではなく、達成したいものです。私はそれがゆっくりであっても、主に述べたように動作させる修正に満足しています。 – NiklasR

+0

カウントとグループで参加する – Drew

答えて

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 | 
+----+---------+----------+ 
関連する問題