我有一张桌子:俱乐部(俱乐部名称,会员名称)
photography | Jim
photography | Eve
photography | Alex
woodworking | Jim
woodworking | Alex
cooking | Alex我怎样才能找到至少和吉姆在同一个俱乐部的人的名字呢?
在这个例子中,我想返回Alex。
我知道如何找到和吉姆一样的俱乐部里人的名字。
SELECT DISTINCT C1.membername
FROM clubname C1, clubname C2
WHERE C1.clubname = C2.clubname AND C2.membername = 'Jim" AND C1.membername <> 'Jim'但我该如何具体说明我只想要和吉姆在同一家俱乐部的人呢?
发布于 2015-03-22 05:11:36
您可以使用多种方法,其中一种方法是使用where not exists,如下所示:
SELECT DISTINCT C1.membername
FROM club C1
WHERE NOT EXISTS (
SELECT C2.membername
FROM club C2 LEFT OUTER JOIN club C3 ON C2.clubname=C3.clubname
AND C3.membername=C1.membername
WHERE C2.membername = 'Jim' AND C3.membername IS NULL
)
AND C1.membername != 'Jim'刚刚用T,这是演示试过了。
发布于 2015-03-22 05:59:06
我正在寻找一个解决方案,类似于一个集合差分运算符,这基本上是链接PM 77-1张贴。
这就是我最后得到的:
SELECT membername
FROM club
WHERE clubname NOT IN (
SELECT C.clubname
FROM club C
WHERE C.clubname NOT IN (
SELECT clubname
FROM club
WHERE membername = 'Jim'
)
)
AND membername <> 'Jim'
GROUP BY membername
HAVING COUNT(membername) = (
SELECT COUNT(*)
FROM club
WHERE membername = 'Jim'
)谢谢你的帮助。
发布于 2015-03-22 04:23:49
如果您的俱乐部少于32个,请为每个俱乐部分配一个二进制标志值:
photography 1
cooking 2
woodworking 4
etc.. 8, 16, 32, 64, 128, 256....然后和Jim的成员和他们的成员之和,检查是否所有Jim的位都是在这个值中设置的(按位和)
https://stackoverflow.com/questions/29190954
复制相似问题