MySQL A或B,但不能同时使用

时间:2018-09-16 18:05:34

标签: mysql mysql-workbench relation self-join

这似乎是一个简单的查询,但是我似乎无法获取它或将其与堆栈溢出时的其他帖子相关联。谁能解释...这是我到目前为止的信息,它正在返回一个或两个人去的所有酒吧的记录。

TBL频繁模式-饮酒者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
    )
  );

1 个答案:

答案 0 :(得分:1)

类似这样的东西应该满足规范:

SELECT f.bar 
  FROM frequents f
 WHERE f.drinker IN ('John','Rebecca')
 GROUP 
    BY f.bar
HAVING COUNT(DISTINCT f.drinker) < 2

  • 获取bar的所有“约翰”和/或“丽贝卡”
  • 将每个bar的行折叠为一行
  • 每个小节的计数为drinker
  • 丢弃计数为2的行(即John和Rebecca)
  • 仅为约翰保留bar的值,而不为丽贝卡保留值,反之亦然