这是我们尝试执行的查询
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
内部查询和子查询都可以独立工作,但是结合使用时会产生错误。查询出了什么问题?
答案 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