我有一个USER表结构,如下所示:
id parent_id userName
10 01 Project manager
11 10 manager
12 11 teamlead
13 12 team member
如果我在where子句中给团队成员ID,我需要找到项目经理ID。我可以得到每个单独查询的结果。
但是我正在尝试用JOIN查询来实现它。我是JOIN查询的新手。我该怎么做?
看起来这不仅仅涉及一个简单的联接。准备好进入痛苦的世界:)。我最近遇到了一个类似的问题,但类型层次结构存储在具有类似结构的表中。最后我写了一个递归查询。在SqlServer中,您将使用一个通用表表达式。在mysql中,您将使用循环。
基本上,这个想法是将一个表与它本身连接起来,遍历一个层次结构,直到到达顶级元素。在幕后,服务器正在创建虚拟表,并将它们相互连接,直到达到某种"停止条件"。这一点非常重要:确保您的停止条件正确,否则可能会导致一些严重问题。
这篇文章写得很好。此外,在谷歌中搜索术语hierarchical query mysql
将获得丰富的信息。
我认为这应该适用于您现有的模式
SELECT ParentUser.UserName AS ManagerName, BaseUser.UserName AS TeamMemberName
FROM User AS BaseUser
INNER JOIN User AS ParentUser
ON BaseUser.parent_id = ParentUser.id
WHERE BaseUser.Id = @PassedInTeamMemberId
基本上你想做的是:
SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.whatever = 'whatever'
我发现可爱而有才华的杰夫·阿特伍德对加入的视觉解释非常有帮助。