构造 SQL 查询以查找所有具有相同值的记录
Construct SQL query to find records that all have the same value
我有一个 table 与某人所做的评论有关。 table 具有以下字段: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);
任何建议或提示将不胜感激。
- 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 的人,然后只包括不在该列表中的人。
我有一个 table 与某人所做的评论有关。 table 具有以下字段: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);
任何建议或提示将不胜感激。
- 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 的人,然后只包括不在该列表中的人。