我有这样的查询:
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'
但两者都返回错误的结果。
这是如何正确完成的?
答案 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')