PostgreSQL:如何从表A中获取数据,并按表B中的列过滤

时间:2019-03-09 23:59:05

标签: sql postgresql

我想获取仅在学校有特定年级孩子的所有父母。 以下是表格的精简版。

TABLE students
  id,
  last_name,
  grade_id,
  school_id

TABLE parents_students
  parent_id,
  student_id

TABLE parents
  id,
  last_name,
  school_id

我尝试了以下查询,但实际上并没有按预期工作。它宁愿取而代之的是一所学校中所有的父母,而不论年级。任何帮助表示赞赏。谢谢。

SELECT DISTINCT
  p.id,
  p.last_name,
  p.school_id,
  st.school_id,
  st.grade_id, 
FROM parents p
  INNER JOIN students st ON st.school_id = p.school_id
WHERE st.grade_id = 118
AND st.school_id = 6
GROUP BY p.id,st.grade_id,st.school_id;

1 个答案:

答案 0 :(得分:1)

我想:

select p.*
from parents p
where exists (select 1
              from parents_students ps join
                   students s
                   on ps.student_id = s.id
              where ps.parent_id = p.id and
                    s.grade_id = 118 and
                    s.school_id = 6
             );

您的问题是您需要有关父母的信息。如果是这样,我看不到您为什么要包括有关学校和年级的多余信息(这是多余的,因为where子句准确指定了这些值是什么。)