【问题标题】:show details without using self-joins在不使用自联接的情况下显示详细信息
【发布时间】:2015-12-09 07:06:35
【问题描述】:

我有一个包含employee_id、employee_name、manager_id 列的表。经理详细信息也存储在同一个员工详细信息表中。现在我必须将结果显示为 {Id,EmployeeName,ManagerName} 而不使用自联接或任何其他联接。

For example :
emp_id   name   manager_id
1        Roy    2
2        Joe    0               
3        raven  2

在我的结果集中,我应该向 Roy 和 raven 显示经理姓名为 Joe。任何帮助将不胜感激。

【问题讨论】:

  • "不使用自联接或任何其他联接" - 但为什么呢?这种限制有什么原因吗?
  • 是的,安迪。这是我的示例分配问题之一,限制是您不能使用任何类型的连接。
  • 还有其他限制吗?非常奇怪的任务,因为它不推荐使用最适合工作的工具。
  • No.. 我们不能使用任何类型的连接。这是唯一的限制。
  • 子查询怎么样,你能用吗? select id, name, IFNULL((select name from emp where id = m.manager_id),'Boss') ManagerName from emp m;

标签: mysql sql database join


【解决方案1】:

您可以使用子查询。

select emp_id,name,
(select name from employee_details a where a.emp_id = b.manager_id) as manager_name  
from employee_details b

【讨论】:

  • 谢谢杰。但是,我昨天尝试了这个。但前辈告诉这是一种加入。所以你不能使用它。我有点困惑。
  • 这不是联接。这是一个相关的子查询,完美地完成了(愚蠢的)简介
【解决方案2】:

在你学习的过程中,如果我只是向你展示完整的查询,我想这对你没有多大帮助,所以我会告诉你如何做:

这是您要显示的员工记录加上一列,即经理姓名。因此,从员工中选择并在您的选择子句中的子查询中获取经理姓名。

我希望这可以帮助您解决这个问题。如果没有,请回来提出更多问题。

【讨论】:

  • 呃,没用。您在另一个答案中得到了完整的解决方案。我建议:闭上眼睛先自己尝试一下:-)
  • 谢谢托尔斯滕。我昨天试过这个。但前辈告诉这是一种加入。所以你不能使用它。我有点困惑。
  • 他们错了。这不被视为联接。如果他们将任何“给我匹配记录”视为连接,那么他们如何获得没有匹配的记录?这没有任何意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2021-08-19
  • 2016-07-05
相关资源
最近更新 更多