我对mysql查询有一个小问题。
我使用5张桌子:
user_has_data(uid,dataid);用户(uid,uname);user_in_group(uid、groupid、data);组(组ID、数据、包ID);软件包(软件包ID,名称)
所有id都是PK。我想构建一个sql查询,通过其uname查找属于指定dataid的用户,并检查该用户是否在属于指定包的组(表user_in_group中的关系)中(一个组分配给一个包)。如果是,则应从用户、包和组中提取数据,否则只应提取用户数据。因此,我使用左联接,因此我也可以获得没有组的用户:
SELECT `uac`.`uid`, `u`.`uid`, `uig`.`groupid`, `ag`.`packageid`
FROM `user_has_data` AS `uac`
INNER JOIN `users` AS `u` ON u.uid = uac.uid
LEFT JOIN `user_in_group` AS `uig` ON uig.uid = uac.uid
LEFT JOIN `groups` AS `ag` ON (ag.groupid = uig.groupid) AND (ag.packageid = 2)
WHERE (uac.dataid = 3 ) AND (u.uname LIKE test% )
GROUP BY `u`.`uid`
不幸的是,我得到了错误的结果:如果用户分配了另一个具有不同packageid的组,那么我得到的组的packageid与联接中所述的不同。
这可能是因为第一个左联接对packageid没有限制,第二个是左联接,因此对结果没有限制(packageid对于所有结果都为NULL,但应该有值)。如果我将第二个左联接更改为普通联接,则组问题将得到解决,但查询无法再找到没有组的用户。
Any ideas how to fix this or even possible? thanks in advance!