这让我和我的团队陷入了困境。我无法组成一个查询,它将严格匹配具有特定的查找排列的单个记录。
我们只有一张查表
room_member_lookup:
room | member
---------------
A | Michael
A | Josh
A | Kyle
B | Kyle
B | Monica
C | Michael我需要一个房间和一个确切的成员列表相匹配,但是我在堆栈溢出时尝试过的其他一切都将与房间A匹配,即使我只想要一个只有Josh和Kyle的房间。
我试过这样的查询
SELECT room FROM room_member_lookup
WHERE member IN (Josh, Michael)
GROUP BY room
HAVING COUNT(1) = 2然而,这仍然将返回房间A,即使有3名成员,我需要一个确切的成员排列,这是匹配的房间,即使不是部分。
发布于 2022-02-05 03:05:52
SELECT room
FROM room_member_lookup a
WHERE member IN ('Monica', 'Kyle')
-- Make sure that the room 'a' has exactly two members
and (select count(*)
from room_member_lookup b
where a.room=b.room)=2
GROUP BY room
-- and both members are in that room
HAVING COUNT(1) = 2根据SQL方言,可以构建动态表(CTE或选择..。以保持成员集(例如Monica和Kyle ),然后使用减号/除sql运算符寻找集合等价性。
https://stackoverflow.com/questions/70994826
复制相似问题