首页 > 解决方案 > 如何根据第一次选择的列 id 选择更多行

问题描述

我有 2 个选择语句。一个返回 2 行,另一个必须返回更多行。我想在一个查询中选择所有行而不使用 UNION,因为我将无法将相同的列 ID 与 UNION 一起使用。

我的查询是这个

SELECT SUB.name FROM (SELECT U1.id ,U1.name, UOM.organization_id AS ORGID FROM #_users AS U1
                        JOIN #_user_organization_map AS UOM ON U1.id = UOM.user_id
                        JOIN #_rsdirectory_entries AS RSE ON UOM.organization_id = RSE.id
                        JOIN #_rsmembership_membership_subscribers AS RMS ON U1.id = RMS.user_id
                        WHERE RMS.membership_id = 66 AND UOM.organization_id = 301) AS SUB
JOIN #_users AS U ON SUB.id = U.id
JOIN #_user_organization_map AS UOM1 ON SUB.id = UOM1.user_id
JOIN #_rsdirectory_entries AS RSE1 ON UOM1.organization_id = RSE1.id
JOIN #_rsmembership_membership_subscribers AS RMS1 ON SUB.id = RMS1.user_id
WHERE UOM1.organization_id = SUB.ORGID;

我要做的是让所有用户都属于特定成员,但并非所有用户都在数据库中的详细信息中携带membership_id 值,只有组织的CEO。

因此,嵌套的 SELECT 应该获取订阅所属的 CEO 的姓名(因此是 members_id),然后在外部 SELECT 中,我想通过组织 ID 获取同一组织下的所有员工。

我得到的结果是 CEO 的名字两次,但我应该得到 CEO 的名字,然后是所有员工的名字。

标签: mysqlsubquerycorrelated-subquery

解决方案


子查询仅返回 CEO 的信息。有关员工的信息在U您加入的表中。

但是你不能加入U.id = SUB.id,因为那只是限制U在 CEO 的行。您希望让所有用户与 CEO 在同一个组织中。

我认为这会做到。最后三个join获取CEO的组织ID

SELECT U.name
FROM #_users AS U1
JOIN #_user_organization_map AS UOM1 ON1 U.id = UOM1.user_id
JOIN #_user_organization_map AS UOM ON UOM1.id = UOM.id
JOIN #_rsdirectory_entries AS RSE ON UOM.organization_id = RSE.id
JOIN #_rsmembership_membership_subscribers AS RMS ON U1.id = RMS.user_id
WHERE RMS.membership_id = 66 AND UOM.organization_id = 301

推荐阅读