这个mysql连接有什么问题?

时间:2012-03-11 02:30:08

标签: mysql join left-join

SELECT p1.userid, p1.username, p2.lids 
        FROM VB_user p1
        LEFT JOIN AB_judge_perm p2 on p1.userid = p2.userid
        WHERE p1.membergroupids LIKE '".19.",%'
        OR p1.membergroupids LIKE '%,".19."'
        OR p1.membergroupids LIKE '%,".19.",%'
        OR p1.membergroupids = '".19."'

我在想p1.membergroupids连接效果不佳?如果我删除了p1.membergroupids条件,那么查询的工作方式就像我想要工作一样,exept我希望它只显示属于第19组的用户,因此LIKEp1.membergroupids是一个多值属性。

1 个答案:

答案 0 :(得分:0)

正如@muistooshort所指出的,你应该将你的membergroupids移动到多对多连接表,这个问题就会消失。像这样的隐藏的非标准化结构将导致你无数的痛苦!创建一个新的连接表 - member_group(member_id,group_id)

如果你坚持使用这个丑陋的结构,你可以用FIND_IN_SET -

替换你的多重OR条件
SELECT p1.userid, p1.username, p2.lids 
FROM VB_user p1
LEFT JOIN AB_judge_perm p2
    ON p1.userid = p2.userid
WHERE FIND_IN_SET(19, p1.membergroupids)