MySQL A 或 B 但不是两者

MySQL A or B but NOT both

这似乎是一个简单的查询,但我似乎无法理解它或将其与堆栈溢出上的其他帖子联系起来。谁能解释一下...这就是我目前所知道的,它正在返回一个人或两个人去过的所有酒吧的记录。

TBL frequents Schema - drinker VARCHAR(50) PK,bar VARCHAR(50) PK

John 或 Rebecca 经常光顾但两人都不常光顾的酒吧

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

  • 获取 'John' and/or 'Rebecca'
  • 的全部 bar
  • 将每个 bar
  • 的行折叠成一行
  • 为每个柱获得 drinker 的计数
  • 丢弃计数为 2 的行(即 John 和 Rebecca)
  • 只为约翰而不是丽贝卡保留 bar 的值,反之亦然