Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 如何组合两个sql查询,使一个查询的输出成为另一个查询的条件_Mysql_Sql_Postgresql - Fatal编程技术网

Mysql 如何组合两个sql查询,使一个查询的输出成为另一个查询的条件

Mysql 如何组合两个sql查询,使一个查询的输出成为另一个查询的条件,mysql,sql,postgresql,Mysql,Sql,Postgresql,我有两个SQL查询 select a.name from Subjects a join Courses b on(a.id=b.subject) group by a.name having count(b.id) >=20; 这将返回包含20个或更多课程的科目名称 select course from course_enrolments group by course having count(student)<20; 这将返回注册人数少于20人的课程 我怎样才能将这两个问题

我有两个SQL查询

select a.name from Subjects a join Courses b on(a.id=b.subject) group by a.name having count(b.id) >=20;
这将返回包含20个或更多课程的科目名称

select course from course_enrolments group by course having count(student)<20;
这将返回注册人数少于20人的课程

我怎样才能将这两个问题结合起来,这样我就可以得到20个或20个以上课程的科目名称,而报名人数不到20人

Courses.id=课程注册。课程可用于联接表课程和课程注册

任何帮助都将不胜感激。

试试以下方法:

select a.name 
from Subjects a join Courses b on(a.id=b.subject) 
where b.id in (select course
    from course_enrolments 
    group by course 
    having count(student)<20
)
group by a.name 
having count(b.id) >=20;
SELECT
FROM (SELECT a.name,
        b.id as courseid
    FROM Subjects a
    JOIN Courses b
        ON a.id = b.subject
    GROUP BY a.name
    HAVING count(a.id) >= 20) s
JOIN (SELECT course
    FROM course_enrollments ce
    GROUP BY course
    HAVING count(*) < 20) c
ON c.course = s.courseid
试试这个:

select a.name 
from Subjects a join Courses b on(a.id=b.subject) 
where b.id in (select course
    from course_enrolments 
    group by course 
    having count(student)<20
)
group by a.name 
having count(b.id) >=20;
SELECT
FROM (SELECT a.name,
        b.id as courseid
    FROM Subjects a
    JOIN Courses b
        ON a.id = b.subject
    GROUP BY a.name
    HAVING count(a.id) >= 20) s
JOIN (SELECT course
    FROM course_enrollments ce
    GROUP BY course
    HAVING count(*) < 20) c
ON c.course = s.courseid

另外,我希望输出类似于.code | |''.| | a.name的内容,而不仅仅是一个.name。当我把它放进去时,它给了我一个错误,说应该将a.code添加到groupby。当我将它添加到GROUPBY时,它给出了错误的输出。我怎么能解决这个问题?我做了一些像group by a.code,a.name这样的事情,它返回了错误的输出顺序很重要。。。按a.name,a.code分组我要a.code | |''.| a.name。代码不应该放在第一位吗?无论如何,它仍然会给出错误的答案。在GROUPBY中输入a.name、a.code,然后在select子句中输入其他顺序。