mysql - 如何选择只有特定标签而不是另一个标签的用户
问题描述
我有以下数据库架构
我需要获取具有标签名称'A'并且他们不应该有标签名称'B'的用户的fname,lname。例如用户X同时具有标签A,标签B,他不应该包含在结果中而如果另一个用户 Y 只有标签“A”,他应该包含在结果中。没有子查询这可能吗?我必须更改架构吗?
解决方案
- 您可以
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
推荐阅读
- reactjs - 尝试为从“babel-plugin-relay/macro”导入的宏加载配置“relay”时出错
- java - 使用 Content-Type 标头从 eml 文件中提取附件名称
- java - 即使使用 .classpath 文件,VS Code 的类路径也不完整
- string - Ada - (Streams) 如何在事先不知道字符串长度的情况下正确调用 String'Read()
- laravel - Laravel:使用引导程序进行级联模型登录和注册
- python - 如何删除文件中的空行
- java - 与复合主键的 OneToOne JPA 关系
- python - 将数据重新发送到 REST
- php - 致命错误:不在对象上下文中使用 $this,但它仍然有效
- ios - iOS wkwebview 不显示网站的移动视图