如何选择只有特定标签而不是另一个标签的用户

np8igboo  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(275)

我有以下db模式

我需要获取具有标记名“a”且不应具有标记名“b”的用户的fname、lname。例如,用户x同时具有标记a和标记b,则不应将其包含在结果中,而如果另一个用户y仅具有标记“a”,则应将其包含在结果中。这不需要子查询就可以吗?我必须改变模式吗?

jum4pzuy

jum4pzuy1#

你可以 GROUP BY 在用户名和用户名上。
使用 HAVING 带的子句 SUM() 聚合以筛选出案例。
如果用户没有标记“b”, SUM(name = 'B') 将为零,后联接。
请尝试以下操作:

SELECT 
  u.user_id, 
  u.fname, 
  u.lname 
FROM 
  user AS u 
JOIN tags AS t ON t.user_id = u.user_id 
JOIN tags_def AS td ON td.tag_id = t.tag_id 
GROUP BY 
  u.user_id, 
  u.fname, 
  u.lname 
HAVING 
  SUM(td.name = 'A') AND
  SUM(td.name = 'B') = 0

相关问题