使用时执行查询时出错

时间:2019-07-17 09:47:16

标签: mysql having

这是我们尝试执行的查询

select
     *
from pub_int_marks
where pub_int_marks.is_active = 1
having count(select
                  student.id
               from student
              inner join prev_class_data on prev_class_data.student_id = student.id
              inner join class_scheme on student.class_scheme_id = class_scheme.id
              where (prev_class_data.class_id = pub_int_marks.class_id or class_scheme.class_id = pub_int_marks.class_id)
              and student.id = 15) > 0

内部查询和子查询都可以独立工作,但是结合使用时会产生错误。查询出了什么问题?

1 个答案:

答案 0 :(得分:0)

我不确定您的查询到底应该做什么,但是我不认为带有HAVING的子查询就是这样做的方式。

这样的事情怎么办?

select pub_int_marks.*
from student
inner join prev_class_data 
    on prev_class_data.student_id = student.id
inner join class_scheme 
    on student.class_scheme_id = class_scheme.id
inner join pub_int_marks
    on prev_class_data.class_id = pub_int_marks.class_id or class_scheme.class_id = pub_int_marks.class_id
where student.id = 15

或者如果您不想在JOIN ON中使用OR:

select pub_int_marks.*
from student
inner join class_scheme 
    on student.class_scheme_id = class_scheme.id
inner join pub_int_marks
    on class_scheme.class_id = pub_int_marks.class_id
where student.id = 15

union

select pub_int_marks.*
from student
inner join prev_class_data 
    on prev_class_data.student_id = student.id
inner join pub_int_marks
    on prev_class_data.class_id = pub_int_marks.class_id
where student.id = 15