Home > Software design >  Can't join multiple tables in sql
Can't join multiple tables in sql

Time:10-28

the length is:

mysql> select count(*) from projects join(select project_skills.skill_id from project_skills where project_skills.skill_id = 7) as s on projects.id = s.skill_id;
 ---------- 
| count(*) |
 ---------- 
|      869 |
 ---------- 

another length is:

mysql> select count(*) from projects join(select project_frameworks.framework_id from project_frameworks where project_frameworks.framework_id = 3) as f on projects.id = f.framework_id;     

 ---------- 
| count(*) |
 ---------- 
|      264 |
 ---------- 

I need to combine these length(result).
So I came up:

select count(*) from projects join(select project_skills.skill_id from project_skills where project_skills.skill_id = 7) as s on projects.id = s.skill_id join(select project_frameworks.framework_id from project_frameworks where project_frameworks.framework_id = 3) as f on projects.id = f.framework_id;

But the length is 0....
How can I reach my ideal?

■ Table Construction

projects vs project_skills(one to many)
skills vs project_skills(one to many)
projects vs project_frameworks(one to many)
frameworks vs project_frameworks(one to many)

project_skill(column:id、project_id、skill_id)
project_frameworks(column:id、project_id、framework_id)

CodePudding user response:

You can sum it up using union all to get the total count.

SELECT sum(q.c) FROM (
select 
  count(*) as c
from 
  projects 
     join( select  project_skills.skill_id from project_skills where project_skills.skill_id = 7 ) as s 
     on projects.id = s.skill_id 
union all 
select 
  count(*) as c
from 
  projects 
  join( select project_frameworks.framework_id  from project_frameworks where project_frameworks.framework_id = 3 ) as f 
  on projects.id = f.framework_id
  ) q;
  • Related