我这样做:
select * from schema2."Student" a INNER JOIN
schema1."StudentMapping" b on ( a."StudentID" = b."StudentID")
where a."IsRemoved" = false AND b."IsRemoved" = false
仅获取Student
表中StudentMapping
表中存在的那些记录,这里IsRemoved
列用于软删除(即每当要删除任何记录时)从任何这些表中只有我将其设置为true
,因此表中存在IsRemoved = false
个记录)并且查询工作正常。现在我想要的是从Student
表中获取所有那些StudentMapping
表中没有的记录,所以我尝试了这个:
select * from schema2."Student" a INNER JOIN
schema1."StudentMapping" b on ( a."StudentId" != b."StudentId")
where a."IsRemoved" = false AND
b."IsRemoved" = false
但这会提供大量记录,超出我的预期,此查询有什么问题,或者Postgresql
中是否有另一种方法可以从一个表中获取另一个表中不存在的匹配记录。< / p>
答案 0 :(得分:1)
执行LEFT OUTER JOIN
然后在where
子句中,指定仅显示连接导致NULL的recod:
select * from schema1."Student" a LEFT OUTER JOIN
schema1."StudentMapping" b on ( a."StudentID" = b."StudentID")
where a."IsRemoved" = false
and b.StudentID IS NULL