MySQL选择多对多和自相关的表

时间:2011-04-22 03:08:57

标签: mysql sql join many-to-many self-join

我有两个表users (user_id, username, etc)groups (group_id, group_name, group_parent, group_type),它们与第三个表group_user (group_id, user_id)有多对多关系。

group_parent是groups表本身的外键。 group_type是enum ('security', 'department', etc)

我有一个user_id,我需要所有用户信息,包括该用户所属的部门(group_type)。到目前为止,这部分很容易。我无法弄清楚的部分是,我还需要为每个部门获取父母(如果有的话)。

我错过了我尝试过的不同查询。这是最后一个:

SELECT u.*, 
       IF (groups.group_type<>'department', NULL, groups.group_name) AS 
       department, 
       IF (groups.group_type<>'department', NULL, groups.group_id)   AS 
       department_id, 
       g.group_name                                                  AS 
       sub_department, 
       g.group_id                                                    AS 
       sub_department_id 
FROM   users u 
       LEFT JOIN group_user_relationships rel 
         ON rel.user_id = u.user_id 
       LEFT JOIN groups 
         ON rel.group_id = groups.group_id 
       LEFT JOIN groups g 
         ON g.group_id = groups.group_parent 
WHERE  user_id =$ user_id 
ORDER  BY department DESC 
LIMIT  0, 1 

编辑:我的主要问题是,如果用户属于另一种类型的组(“部门”除外),但不属于任何部门,则不会获得结果。对于那种情况,它应该返回,u。*和null用于所有其他字段,但事实并非如此。

0 个答案:

没有答案
相关问题