如何根据首次选择的列ID选择更多行

时间:2019-02-01 21:04:07

标签: mysql subquery correlated-subquery

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

我的查询是这个

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;

我要做的是让属于特定成员资格的所有用户,但不是所有用户都在数据库中的详细信息中携带member_id值,只有组织的首席执行官。

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

我得到的结果是首席执行官的名字两次,但是我应该先得到CEO的名字,然后再得到所有雇员的名字。

1 个答案:

答案 0 :(得分:0)

子查询仅返回CEO的信息。有关员工的信息位于与之连接的U表中。

但是您不能加入U.id = SUB.id,因为这仅将U限制在CEO的行内。您想让所有所有与首席执行官在同一组织中的用户。

我认为这可以做到。最后三个加入会获得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