如何选择仅具有特定标签而不具有其他标签的用户

时间:2018-10-16 18:04:01

标签: mysql sql

我有以下数据库模式 sql schema

我需要获取具有标签名称'A'且没有标签名称'B'的用户的fname,lname,例如,用户X既具有标签A,也具有标签B,因此不应包括他如果另一个用户Y仅具有标签“ A”,则应将其包括在结果中。没有子查询就可以吗?我必须更改架构吗?

1 个答案:

答案 0 :(得分:1)

  • 您可以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