首先,对不起,如果这是一个足够的重复.我发现了这个问题,这几乎可以达到我想要的效果,但是我无法解决如何根据自己的需要改变它的问题.
我有这3张桌子:
cs_Accounts: +----+-----------------------------+-------------+ | id | email | username | +----+-----------------------------+-------------+ | 63 | jamasawaffles@googlil.com | jamwaffles2 | | 64 | jamwghghhfles@goomail.com | jamwaffles3 | | 65 | dhenddfggdfgetal-pipdfg.com | dhendu9411 | | 60 | jwapldfgddfgfffles.co.uk | jamwaffles | +----+-----------------------------+-------------+ cs_Groups: +----+-----------+------------+-------------+ | id | low_limit | high_limit | name | +----+-----------+------------+-------------+ | 1 | 0 | 0 | admin | | 2 | 1 | 50 | developer | | 3 | 76 | 100 | reviewer | | 4 | 51 | 75 | beta tester | | 5 | 1 | 50 | contributor | +----+-----------+------------+-------------+ cs_Permissions: +----+---------+----------+ | id | user_id | group_id | +----+---------+----------+ | 4 | 60 | 4 | | 3 | 60 | 1 | | 5 | 60 | 2 | | 6 | 62 | 1 | | 7 | 62 | 3 | +----+---------+----------+
我现在一直在与3路加入进行摔跤,我无法得到我想要的结果.我正在寻找这种行为:将为每个用户返回cs_Accounts一行,cs_Permissions其中包含一行,其中包含一个ID和一个组的ID cs_Groups,以及group_id具有a 的组,high_lmiit并且low_limit我可以在一个范围内指定.
使用上表中的数据,我们可能会得到这样的结果:
email username cs_Groups.name ---------------------------------------------------------- jwapldfgddfgfffles.co.uk jamwaffles admin jwapldfgddfgfffles.co.uk jamwaffles developer jwapldfgddfgfffles.co.uk jamwaffles beta tester dhenddfggdfgetal-pipdfg.com dhendu9411 admin dhenddfggdfgetal-pipdfg.com dhendu9411 reviewer
但是还有一个额外的条件.这种情况是只有在用户所属的组具有a high_limit且low_limit具有可以使用WHERE子句指定的值时才选择行的情况.如您所见,上表仅包含权限表中包含行的用户.
这感觉很像家庭作业,但有一个像詹姆斯这样的名字,我总是愿意帮忙.
select a.email,a.username,g.name
from cs_Accounts a
inner join cs_Permissions p on p.user_id = a.id
inner join cs_Groups g on g.id = p.Group_id
where g.low_limit > 70
and g.high_limt < 120
Run Code Online (Sandbox Code Playgroud)