sql - MySQL 查询多对多关系中的表
问题描述
我在创建 SQL 查询时遇到问题。我准备了 3 个记录很少的表:
tbl_documents
+-------------+------------------+
| document_id | document_type_id |
+-------------+------------------+
| 0001 | PRE |
| 0002 | PRE |
| 0003 | PRE |
+-------------+------------------+
tbl_users
+---------+------------------+
| user_id | user_name |
+---------+------------------+
| Jara-PC | Jara S |
| User1 | Uživatel 1 |
| User2 | Uživatel 2 |
+---------+------------------+
每个文档可以有多个批准者(用户),每个用户可以是多个文档的批准者,所以我使用表 tbl_approvers 创建了多对多关系
tbl_approvers
+-------------+-------------+------------------+
| approver_id | document_id | document_type_id |
+-------------+-------------+------------------+
| Jara-PC | 0001 | PRE |
| Jara-PC | 0003 | PRE |
+-------------+-------------+------------------+
我在使用此结果创建查询时遇到问题- 对于每个文档列表,都有一个不是批准者的用户,如下所示:
+------------------+-------------+--------------+
| document_type_id | document_id | not_approver |
+------------------+-------------+--------------+
| PRE | 1 | User1 |
| PRE | 1 | User2 |
| PRE | 2 | Jara-PC |
| PRE | 2 | User1 |
| PRE | 2 | User2 |
| PRE | 3 | User1 |
| PRE | 3 | User2 |
+------------------+-------------+--------------+
我创建了查询,它将返回每个文档的批准者:
SELECT *
FROM (
SELECT tdoc.document_type_id,
tdoc.document_id,
ta.approver_id
FROM tbl_documents tdoc
LEFT JOIN tbl_approvers ta
ON tdoc.document_id = ta.document_id AND
tdoc.document_type_id = ta.document_type_id) tc;
结果:
+------------------+-------------+----------+
| document_type_id | document_id | approver |
+------------------+-------------+----------+
| PRE | 0001 | Jara-PC |
| PRE | 0002 | null |
| PRE | 0003 | Jara-PC |
+------------------+-------------+----------+
现在我被卡住了,我可以查询是否有用户不批准任何文件,但这不是我想要的。甚至可以在 SQL 中完成吗?
解决方案
这是你想要的吗?
Select u.userid as "Not Approver" ,
d.* from
tbl_users u left join
tbl_approvers a on
u.userid <a.approver_id
right join
tbl_documents d
On
a.document_id =d.document_id
and a.document_type_id = d.
document_type_id
推荐阅读
- php - Wordpress user_register 挂钩未通过 WP REST API 执行?
- java - 包javax.servlet 不存在| 包 jakarta.servlet 不存在
- javascript - 检测浏览器而不是操作系统并隐藏/显示 div
- flutter - 任务“:simple_edge_detection:externalNativeBuildDebug”执行失败
- react-native - TypeScript 错误:构建 React Native App 时出现 Ts 8006、Ts 8010?
- python - 如何使用 discord.py 机器人注销?
- javascript - 使用边距后如何制作底部空间:自动
- python - Pygame 蒙版碰撞仅在第一次碰撞时对基础造成伤害
- python - 在 anaconda 提示符下导入 cv2 时出错,但它在 jupyter notebook 上工作
- javascript - 如果在开头和结尾包含特定字符/字符串,则替换字符串