Mysql 使用 where 和 like 加入查询
Mysql join query with where and like
我有三个相关的 tables users
、groups
和 group_members
。用户 table 包含 users
信息,groups
table 包含群组名称和群组所有者 ID(即 users_id
)。 Table group_members
包含每个组的成员(user_id
和 group_id
)。我尝试加载每个组的用户详细信息,但结果不正确。我的 table 是,
用户
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)。请给我一个解决方案。
您必须在您的 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%'
这不是你想要的。
我有三个相关的 tables users
、groups
和 group_members
。用户 table 包含 users
信息,groups
table 包含群组名称和群组所有者 ID(即 users_id
)。 Table group_members
包含每个组的成员(user_id
和 group_id
)。我尝试加载每个组的用户详细信息,但结果不正确。我的 table 是,
用户
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)。请给我一个解决方案。
您必须在您的 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%'
这不是你想要的。