【发布时间】:2021-11-12 17:56:40
【问题描述】:
我在 MySQL 数据库中有以下表格:
+------------------------+
| Users |
+----+--------+----------+
| id | name | role |
+----+--------+----------+
| 1 | Martin | admin |
+----+--------+----------+
| 2 | George | admin |
+----+--------+----------+
| 3 | John | employee |
+----+--------+----------+
+-------------------------+
| Forms |
+----+--------------------+
| id | type |
+----+--------------------+
| 10 | marketing_form |
+----+--------------------+
| 11 | client_survey_form |
+----+--------------------+
| 12 | client_survey_form |
+----+--------------------+
+---------------------------------------------+
| UsersAssignToForms |
+----+---------+---------+--------------------+
| id | user_id | form_id | additional_comment |
+----+---------+---------+--------------------+
| 20 | 1 | 10 | Lorem ipsum... |
+----+---------+---------+--------------------+
| 21 | 2 | 10 | Lorem ipsum.... |
+----+---------+---------+--------------------+
| 22 | 3 | 10 | null |
+----+---------+---------+--------------------+
| 23 | 3 | 11 | null |
+----+---------+---------+--------------------+
我想要结果:
+---------+---------+------------+--------------------+--------------------+
| user_id | form_id | first_name | form_type | additional_comment |
+---------+---------+------------+--------------------+--------------------+
| 1 | 10 | Martin | marketing_form | Lorem ipsum... |
+---------+---------+------------+--------------------+--------------------+
| 3 | 11 | John | client_survey_form | null |
+---------+---------+------------+--------------------+--------------------+
| null | 12 | null | client_survey_form | null |
+---------+---------+------------+--------------------+--------------------+
首先,我想限制从联接查询返回的用户数量(每个表单一个用户)。如果将具有admin 角色的用户分配给表单,我想显示此用户(将admin 角色优先于employee 角色)并将返回的用户数限制为1,如果admin 未分配,但@987654328 @ 被分配查询应该返回这个用户,如果没有人被分配查询应该返回空值(可能是左连接或右连接)。
我在 stackoverflow 上看到了这个问题 - MySQL JOIN with LIMIT 1 on joined table,但不幸的是,第一个答案有 n+1 个问题,其余答案是通过简单的一次连接完成的。 出于我的目的,我需要加入更多表格,但不想在上面设计这些表格来阐明我想要实现的目标,但这非常重要。
所以我的查询可能看起来像:
SELECT u.id, f.id, u.name, f.type, uf.additional_comment, [more selects from other tables...] FROM Forms as f
LEFT JOIN Users as u ON ......
INNER JOIN UsersAssignToForms as uf ON .....
[here i would like to put more and more inner joins.....]
【问题讨论】:
-
表单 id 12 来自哪里?
-
这一行是否有任何逻辑,其中 null 具有不同的表单 ID,而您的给定数据中不存在?
-
对不起,我忘记使用分配给任何人的表单来修改表单表。我刚刚更新了