构造 SQL 查询以查找所有具有相同值的记录

Construct SQL query to find records that all have the same value

我有一个 table 与某人所做的评论有关。 table 具有以下字段:reviewIdpersonIdisComplete,其中 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);

任何建议或提示将不胜感激。

  • Table A 包含所有记录
  • Table B 包含至少有 1 条优秀评论的所有人。
  • 我们使用左连接并消除空值,这样剩下的就只有拥有没有未完成评论的记录的用户...

.

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

我只对 return 条记录使用了 distinct。

另一种方法(我认为是最有效的)是使用 exists 语句

SELECT Distinct A.PersonID
FROM table A
WHERE not exists (Select 1 from Table B where B.iscomplete=0 and A.PersonID=B.PersonID)

这基本上是说 return 所有没有不完整评论的人。

这两种情况的前提是,不完整评论的单个条目足以将其从结果集中排除。

SELECT DISTINCT(PersonID) FROM reviews 
WHERE PersonId NOT IN (
    SELECT DISTINCT(PersonID) FROM reviews WHERE isComplete = 0
)

有不止一种方法可以做到这一点。

SELECT * FROM reviews a WHERE a.PersonId NOT IN
( SELECT b.PersonId FROM reviews b WHERE b.isComplete = 0 )

这是获取所有匹配 isComplete = 0 的人,然后只包括不在该列表中的人。