我有一个USER表结构,如下所示:
id parent_id userName
10 01 Project manager
11 10 manager
12 11 teamlead
13 12 team member
如果我在where子句中提供团队成员ID,我需要找到项目经理ID。我可以在每个单独的查询中获得结果。
但我正在尝试使用JOIN查询来实现它。我是JOIN查询的新手。我该怎么做?
答案 0 :(得分:3)
看起来这似乎不仅仅是简单的连接。准备进入一个痛苦的世界:)。我最近遇到了类似的问题,但是类型层次结构存储在具有类似结构的表中。我最终得到的是编写递归查询。在Sql Server中,您将使用Common Table Expression。在mysql中,您将使用循环。
基本上,我们的想法是你自己加入一个表,走一个层次结构,直到你到达顶级元素。在幕后,服务器正在创建虚拟表并将它们相互连接,直到达到某些“停止条件”。这一点非常重要:确保您的停止条件正确,否则可能会导致严重问题。
This post是一个很好的破败。此外,在Google中一般搜索hierarchical query mysql
条款会产生大量信息。
答案 1 :(得分:1)
我认为这应该适用于您现有的架构
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
答案 2 :(得分:0)
基本上你想要这样做:
SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.whatever = 'whatever'
我从可爱而有才华的杰夫阿特伍德那里找到这个visual explanation of joins非常有帮助。