Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么表在SQL查询的FROM子句中以不同的别名存在两次?_Sql_Oracle - Fatal编程技术网

为什么表在SQL查询的FROM子句中以不同的别名存在两次?

为什么表在SQL查询的FROM子句中以不同的别名存在两次?,sql,oracle,Sql,Oracle,我有一个疑问: SELECT to_number(gr.code) group_index, gr.NAME group_name, f.*, gr.description gr_desc FROM obj$groups gr, obj$group_objects gro, obj$group_

我有一个疑问:

 SELECT to_number(gr.code) group_index,             
       gr.NAME group_name, f.*,                         
       gr.description gr_desc                           
      FROM obj$groups gr, obj$group_objects gro,         
       obj$group_objects gro2, tdf$flex_fields f,       
       inv$requests w, inv$Direction_Criterions c       
     WHERE gr.NO = gro.object_no                        
       AND gro.group_no = obj$group_service.path_to_no(
       'Some Condition String', 
       tdf$flex_field_service.get_local_list_group_no)
       AND gro2.group_no = gr.NO                        
       AND f.NO = gro2.object_no                        
       AND w.no = 11593597                               
       AND c.direction_no = w.direction_no              
       AND f.no = c.criterion_no                        
     ORDER BY to_number(gr.code), f.name
为什么这里有两个相同的表组对象?我试着对它进行反向工程,但我自己不能,也许这里的任何人都知道这个把戏

这在Oracle数据库中发生。

这是一个名为的操作。当您想要连接来自同一个表的记录时

当您在同一个表中有与记录相关的记录时,通常会发生这种情况。例如:

create table tree
(
   id number primary key,
   parent_id number,
   value varchar2(100)
);
因此,如果要检索节点及其父节点,请执行以下操作:

select c.id, c.value, p.value as parent_value
  from tree c inner join tree p on (c.parent_id = p.id)
您发布的查询中也发生了类似的情况。

这是一个名为的操作。当您想要连接来自同一个表的记录时

当您在同一个表中有与记录相关的记录时,通常会发生这种情况。例如:

create table tree
(
   id number primary key,
   parent_id number,
   value varchar2(100)
);
因此,如果要检索节点及其父节点,请执行以下操作:

select c.id, c.value, p.value as parent_value
  from tree c inner join tree p on (c.parent_id = p.id)

在您发布的查询中也发生了类似的情况。

group\u对象被连接到gro2.group\u no=gr.no子句中的组和f.no=gro2.object\u no子句中的flex\u字段。我怀疑这涵盖了obe组对象集与另一组对象集不完全相同的情况,这限制了两个连接中的行,其中一个连接join将删除一个无法连接到另一个表的group对象。

group对象将被连接到gro2.group\U no=gr.no子句中的组和f.no=gro2.object\U no子句中的flex\U字段。我怀疑这涵盖了obe组对象集与另一组对象集不完全相同的情况,这限制了两个连接中的行,其中一个连接删除了一个组对象,而该组对象将无法连接到另一个表。

很难从这段代码中看出原始程序员的意图,特别是如果没有对各个表所包含内容的描述


但是,在我看来,这个查询的最终结果似乎应该报告来自group_objects表中两个不同记录的信息—一个记录中的group no与某些条件字符串匹配,另一个记录中的group no与groups表中的列值匹配。如果非要我猜的话,它是在检索一个操作,其中一个项在两个组之间传输,或者被替换来代替第二个组中的一个对象,或者诸如此类的东西。

很难从这段代码中看出原始程序员的意图,尤其是在没有对各个表所包含内容的描述的情况下


但是,在我看来,这个查询的最终结果似乎应该报告来自group_objects表中两个不同记录的信息—一个记录中的group no与某些条件字符串匹配,另一个记录中的group no与groups表中的列值匹配。如果非要我猜的话,它是在检索一个操作,其中一个项目在两个组之间传输,或者被替换来代替第二个组中的一个对象,或者诸如此类的东西。

为了举例说明,与标准EMP表等效的是:

select e.ename, m.ename manager_name
from   emp e, emp m
where  m.empno = e.mgr;
或者用更现代的语法:

select e.ename, m.ename manager_name
from   emp e
join   emp m on m.empno = e.mgr;
i、 e.与经理一起显示员工姓名及其经理姓名

关键是同一个表在不同角色的查询中使用了两次。它不必是自联接,中间可以有另一个或多个表,如下所示:

select e.ename, pm.ename projmanager_name
from   emp e
join   project_assignments pa on p.empno = pa.empno
join   projects p on p.proj_id = pa.proj_id
join   emp pm on pm.empno = p.projmanager_empno;

i、 e.显示分配给项目的员工姓名,以及该项目的项目经理姓名。

如需说明,与标准EMP表等效的内容为:

select e.ename, m.ename manager_name
from   emp e, emp m
where  m.empno = e.mgr;
或者用更现代的语法:

select e.ename, m.ename manager_name
from   emp e
join   emp m on m.empno = e.mgr;
i、 e.与经理一起显示员工姓名及其经理姓名

关键是同一个表在不同角色的查询中使用了两次。它不必是自联接,中间可以有另一个或多个表,如下所示:

select e.ename, pm.ename projmanager_name
from   emp e
join   project_assignments pa on p.empno = pa.empno
join   projects p on p.proj_id = pa.proj_id
join   emp pm on pm.empno = p.projmanager_empno;

i、 e.显示分配给项目的员工的姓名,以及该项目的项目经理的姓名。

自联接在哪里?你是说交叉连接吗?@Preet:没有,但我刚刚纠正了我的拼写错误。树表是自联接的。@Preet:否,是自联接的:联接到自身:-自动连接在哪里?你是说交叉连接吗?@Preet:没有,但我刚刚纠正了我的拼写错误。树表是自联接的。@Preet:否,是自联接的:联接到自身:-