为什么表在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:否,是自联接的:联接到自身:-