多个和INNER JOIN?

时间:2016-03-29 09:24:46

标签: mysql sql

我有这样的查询:

SELECT Email 
FROM minisecurity.my_aspnet_membership m         
INNER JOIN minisecurity.my_aspnet_details t ON t.id = m.userId         
INNER JOIN minisecurity.my_aspnet_usersinroles r ON m.userId = r.userId and r.roleId = '7'         
WHERE t.customerid = '2'

在我的第二个INNER JOIN我要过滤,以便得到一个结果,其中roleId为6或7。

我试过了两次

INNER JOIN minisecurity.my_aspnet_usersinroles r
    ON m.userId = r.userId and r.roleId = '7' and r.roleId = '6'

INNER JOIN minisecurity.my_aspnet_usersinroles r 
    ON m.userId = r.userId and r.roleId = '7' or r.roleId = '6'

但两者都返回错误的结果。

这是如何正确完成的?

2 个答案:

答案 0 :(得分:1)

检查以下查询 -

SELECT Email 
FROM minisecurity.my_aspnet_membership m         
INNER JOIN minisecurity.my_aspnet_details t ON t.id = m.userId         
INNER JOIN minisecurity.my_aspnet_usersinroles r ON m.userId = r.userId       
WHERE t.customerid = 2 and r.roleId in (6,7);

你也可以使用OR,但是比OR更优化 -

SELECT Email 
FROM minisecurity.my_aspnet_membership m         
INNER JOIN minisecurity.my_aspnet_details t ON t.id = m.userId         
INNER JOIN minisecurity.my_aspnet_usersinroles r ON m.userId = r.userId       
WHERE t.customerid = 2 and (r.roleId=6 OR r.roleId=7);

注意:当您使用内部联接时,您可以使用on子句或where子句中的附加条件。

感谢@strawberry进行编辑以更好地回答。

@Andy:在考虑到这些字段是整数类型而不是char / varchar类型后删除'',但如果任何字段不是整数,则必须使用''。

答案 1 :(得分:0)

AND precedence超过OR,所以你想要的是:

 INNER JOIN ... ON m.userId = r.userId and (r.roleId = '7' or r.roleId = '6')