在单个查询中从交联表中获取数据集

时间:2014-02-23 19:49:23

标签: mysql join foreign-keys relational-database

想象一下以下的MySQL表环境:

管理员

id   username

用户组

id   groupName

adminXusergroup (交联表)

id   adminId   groupId

adminId groupID 已建立索引相应地配置外键关系( adminId 指向 admins.id groupId 指向 usergroups.id )。

所有 id 字段都是主键。

我想从管理员中检索与用户组对应的特定用户的所有数据集。

我已经设法在PHP中执行此操作,首先从 adminXusergroup 获取相应的行,然后在第二次调用中创建可从管理员中选择的ID列表。但即使它有效,我觉得它可以进一步优化,可能是通过在一个MySQL查询中获取所有必需的信息(可能加入?)。

如何通过将信息合并到交联表中,从管理员中获取与用户组对应的所有数据集(基于ID) adminXusergroup

我目前的做法是这样的:

SELECT * FROM usergroups WHERE usergroups.id=(SELECT id FROM adminXusergroup WHERE adminId="1");

但它似乎不对,我不确定如何在这种情况下应用嵌套选择?

2 个答案:

答案 0 :(得分:0)

我认为您可以使用IN条件

来实现此目的
SELECT * 
FROM usergroups 
WHERE usergroups.id IN
(
    SELECT id 
    FROM adminXusergroup 
    WHERE adminId=1
);

否则您可以使用INNER JOIN查询

SELECT *
FROM usergroups a
INNER JOIN adminXusergroup b
ON a.id = b.groupId
WHERE b.adminId = 1

答案 1 :(得分:0)

试试这个

 SELECT a.id,u.*,x.* FROM admin as a
 INNER JOIN usergroups as u on a.id=u.id
 INNER JOIN adminXusergroup as x ON x.id=u.id WHERE u.id='userid'