当前位置: 首页 > 面试题库 >

了解自我加入

娄德运
2023-03-14
问题内容

我正在练习 自我连接 ,这是我编写查询时不了解的事情。

我有桌子 'employee'

雇员表包含三个记录。

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

最后一列manager_id是指使Ahmed和Tove成为Ola经理的第一列ID。

如果我这样写查询

SELECT emp.employee as NAME, manager.employee as MANAGER
FROM employee as emp, employee as manager
WHERE emp.id = manager.manager_id

结果使艾哈迈德和托夫经理。然而

SELECT emp.employee as NAME, manager.employee as MANAGER
FROM employee as emp, employee as manager
WHERE manager.id = emp.manager_id

正确无误,有人可以解释吗?


问题答案:

自联接就像内部联接,其中同一表的两个或更多html" target="_blank">实例通过公共数据类型的列/字段联接在一起。这种连接(内部连接)根据连接条件给出公共行。

雇员表包含三个记录。在这种情况下,

雇员为雇员:

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

员工为经理:

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

现在第一种情况:让我们尝试一下以了解不同之处:

选择emp.*manager.* 从雇员作为emp,从雇员作为经理WHERE emp.id = manager.manager_id

+-----+---------------+------------+-----+---------------+------------+
| id  | employee      | manager_id | id  | employee      | manager_id |
+-----+---------------+------------+-----+---------------+------------+
| 1   | Ola           |   NULL     | 2   | Ahmed         |    1       |
| 1   | Ola           |   NULL     | 3   | Tove          |    1       |
+----------+----------+------------+----------+----------+------------+

参见emp.id =
manager.manager_id。因此,以emp.employee作为NAME从第一张表中给出Ola行,以manager.employee作为MANAGER从第二张表中给出Ahmed&Tove行。

现在第二种情况:让我们尝试一下以了解不同之处:

选择emp.*manager.* 从雇员作为emp,从雇员作为经理WHERE manager.id = emp.manager_id

+-----+---------------+------------+-----+---------------+------------+
| id  | employee      | manager_id | id  | employee      | manager_id |
+-----+---------------+------------+-----+---------------+------------+
| 2   | Ahmed         |    1       | 1   | Ola           |   NULL     |  
| 3   | Tove          |    1       | 1   | Ola           |   NULL     |
+----------+----------+------------+----------+----------+------------+

参见manager.id =
emp.manager_id。因此,作为emp.employee作为NAME从第一张表中给出了Ahmed&Tove的行,而作为MANAGER从第二个表中给出了Ola行的则是manager.employee。



 类似资料:
  • 这是我第一次在这里寻求帮助,我的部门(政府)已经在市场上发布了一些应用程序(Google Play),直到昨天,当我在Nexus上获得Jelly Bean 4.2时,加密和描述一直运行得很好。加密工作正常,它实际上加密了要存储的信息。虽然当解密它时,我得到了一个异常,就像这样:填充块损坏。我已经检查了字符串,并且它与其他设备上的字符串一致(出于测试目的使用相同的密钥),这意味着它完全相同。问题是我

  • 问题内容: 我有一张桌子 我想得到所有薪水高于A薪水的员工。我不想使用任何嵌套或子查询。在一次采访中有人问过,提示是使用自我加入。我真的不知道如何实现相同的目标。 问题答案: 使用自我加入

  • 通过作曲家安装Moltin Cart,然后添加服务提供商:并添加别名

  • 问题内容: 根目录,目录文件的循环通过以下步骤进行? 获取开始目录的根目录:C:\ dir1 \ dir2 \ startdir 在C:\ dir1 \ dir2 \ startdir中获取文件夹,并返回文件夹“ dirlist”的列表 获取第一个目录列表项中的文件,并返回文件“ filelist”列表作为文件列表列表的第一项。 移至目录列表的第二项,并将此文件夹“ filelist2”中的文件列

  • 问题内容: 我一直在阅读,据我所知,我利用网络数据包定时等事件创建了密码随机数。但是,我是否理解使用PRNG并从中植入数字的权利?还是只要有一点就使用它- 当它们用完时会回落到PRNG并从哪里收集种子? 问题答案: 从联机帮助页: 随机数发生器将来自设备驱动程序和其他来源的环境噪声收集到一个熵池中。发生器还保持熵池中噪声位数的估计。根据该熵池,创建随机数。 读取时,/ dev / random设备

  • G6谁了解。加我一下。问个东西。我写不出来了啊? 结果我画的是这样的