我有一张与一个人的评论相关的表格。该表格包含以下字段: reviewId , personId , isComplete ,其中 isComplete 是一个布尔值,表示是否具体那个人完成了他的评论。
想象一下以下值:
ReviewID | PersonID | isComplete |
1 1 1
2 1 1
3 2 0
4 2 0
5 3 1
6 3 0
在这种情况下,我应该只得到 PersonID = 1,因为只有他们完成了所有的评论。
我尝试了很多查询,最接近的是:
SELECT * FROM reviews x WHERE 1 = ALL (SELECT isComplete FROM reviews y WHERE x.personid = y.personid AND isComplete=1);
非常感谢任何建议或提示。
答案 0 :(得分:2)
SELECT Distinct A.PersonID
FROM TABLE A
LEFT JOIN Table B
on A.PersonID = B.PersonId
and B.isComplete = 0
WHERE B.PersonId is null
我使用distinct只返回1条记录。
另一种方法(我认为最有效)是使用存在语句
SELECT Distinct A.PersonID
FROM table A
WHERE not exists (Select 1 from Table B where B.iscomplete=0 and A.PersonID=B.PersonID)
这基本上说明了所有没有完整评论的人。
这两种情况的前提是,单个条目的不完整审核足以将其从结果集中排除。
答案 1 :(得分:1)
SELECT DISTINCT(PersonID) FROM reviews
WHERE PersonId NOT IN (
SELECT DISTINCT(PersonID) FROM reviews WHERE isComplete = 0
)
答案 2 :(得分:1)
有多种方法可以做到这一点。
SELECT * FROM reviews a WHERE a.PersonId NOT IN
( SELECT b.PersonId FROM reviews b WHERE b.isComplete = 0 )
这是让所有匹配isComplete = 0的人,然后只包括不在该列表中的人。