MySQL A或B,但不是两者都有

MySQL A或B,但不是两者都有,mysql,mysql-workbench,relation,self-join,Mysql,Mysql Workbench,Relation,Self Join,这似乎是一个简单的查询,但我似乎无法获取它,也无法将其与堆栈溢出上的其他帖子联系起来。谁能解释一下。。。这就是我到目前为止所拥有的,它返回了一个人或两个人去的所有酒吧的记录 TBL频繁模式-饮酒者VARCHAR50 PK,bar VARCHAR50 PK 约翰或丽贝卡经常光顾的酒吧,但他们两人都不常光顾 SELECT DISTINCT bar FROM frequents WHERE drinker = 'John' XOR drinker = 'Rebecca' AND bar NOT

这似乎是一个简单的查询,但我似乎无法获取它,也无法将其与堆栈溢出上的其他帖子联系起来。谁能解释一下。。。这就是我到目前为止所拥有的,它返回了一个人或两个人去的所有酒吧的记录

TBL频繁模式-饮酒者VARCHAR50 PK,bar VARCHAR50 PK

约翰或丽贝卡经常光顾的酒吧,但他们两人都不常光顾

SELECT DISTINCT bar 
FROM frequents
WHERE drinker = 'John' XOR drinker = 'Rebecca' 
  AND bar NOT IN (
    SELECT f1.bar 
    FROM frequents f1, frequents f2
    WHERE (
      f1.drinker = 'John' 
      AND f2.drinker = 'Rebecca' 
      AND f1.bar = f2.bar
    )
  );

类似的内容应满足规范要求:

SELECT f.bar 
  FROM frequents f
 WHERE f.drinker IN ('John','Rebecca')
 GROUP 
    BY f.bar
HAVING COUNT(DISTINCT f.drinker) < 2
为“约翰”和/或“丽贝卡”获得所有的酒吧 将每个栏的行折叠为一行 每一个酒吧都有一个酒鬼 丢弃计数为2的行,即John和Rebecca 只给约翰留下酒吧的价值观,而不是丽贝卡,反之亦然
我不知道你可以在count中使用distinct关键字。那就容易多了,谢谢!