使用JOIN实现两个单独查询的结果

时间:2012-03-08 15:28:35

标签: php sql

我有一个USER表结构,如下所示:

id  parent_id      userName
10     01        Project manager
11     10        manager
12     11        teamlead
13     12        team member

如果我在where子句中提供团队成员ID,我需要找到项目经理ID。我可以在每个单独的查询中获得结果。

但我正在尝试使用JOIN查询来实现它。我是JOIN查询的新手。我该怎么做?

3 个答案:

答案 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非常有帮助。