【问题标题】:Mysql join query with where and likeMysql join 查询与 where 和 like
【发布时间】:2015-05-26 02:26:09
【问题描述】:

我有三个相关的表usersgroupsgroup_members。 users 表包含users 信息,groups 表包含组名和组所有者ID(即users_id)。表group_members 包含每个组的成员(user_idgroup_id)。我尝试加载每个组的用户详细信息,但结果不正确。我的桌子是,

用户


id   firstname   lastname    email

1    anu         mm          anu@gmail.com
2    manu        mohan       manu@gmail.com
3    cinu        ab          cinu@gmail.com
4    vinu        mj          vinu@gmail.com
5    vijesh      cc          vijesh@gmail.com
6    admin       admin       admin@gmail.com

群组


id     user_id     name

1      1           group1
2      2           group2
3      2           group3
4      3           group4

group_members


id    user_id    group_id

1     1          1
2     2          2
3     2          3
4     3          4
5     2          3
7     1          2
8     1          3
9     3          1

但是当我尝试下面的查询时,

select users.firstname,users.lastname,users.email,groups.name as groupname from users inner join groups on groups.user_id = users.id inner join group_members on group_members.group_id = groups.id where groups.id=3 AND users.firstname LIKE 'cin%' OR users.lastname LIKE 'cin%' OR users.email LIKE 'cin%'

得到结果(这不是预期的)


firstname     lastname      email            groupname

cinu          ab            cinu@gmail.com   group4

在这种情况下,我使用了 where 条件 WHERE groups.id =3,但结果采用了 group4(groups.id 为 4)。请给我一个解决方案。

【问题讨论】:

  • 注意 group_members.id 是多余的

标签: mysql join where sql-like


【解决方案1】:

你必须使用 () 围绕你的 or 声明:

 where groups.id=3 AND (users.firstname LIKE 'cin%' OR users.lastname LIKE 'cin%' OR users.email LIKE 'cin%')

因为AND 具有更高的优先级,您的查询看起来像:

 where (groups.id=3 AND users.firstname LIKE 'cin%') OR users.lastname LIKE 'cin%' OR users.email LIKE 'cin%'

这不是你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多