mysql a或b,但不能两者兼而有之

kfgdxczn  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(272)

这似乎是一个简单的查询,但我似乎无法得到它,也无法将它与堆栈溢出上的其他文章联系起来。有谁能解释。。。这是我到目前为止,它是返回的记录,所有酒吧,其中一个或两个人去。
tbl frequents schema-饮酒者varchar(50)pk,酒吧varchar(50)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
    )
  );
ghg1uchk

ghg1uchk1#

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

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 为了约翰而不是丽贝卡,反之亦然

相关问题