首页 > 解决方案 > 如何选择只有特定标签而不是另一个标签的用户

问题描述

我有以下数据库架构 sql 架构

我需要获取具有标签名称'A'并且他们不应该有标签名称'B'的用户的fname,lname。例如用户X同时具有标签A,标签B,他不应该包含在结果中而如果另一个用户 Y 只有标签“A”,他应该包含在结果中。没有子查询这可能吗?我必须更改架构吗?

标签: mysqlsql

解决方案


  • 您可以GROUP BY在用户 ID 和名称上。
  • 使用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

推荐阅读