Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 将表连接到另一个表,然后连接到自身_Sql_Oracle_Join_Powerbuilder - Fatal编程技术网

Sql 将表连接到另一个表,然后连接到自身

Sql 将表连接到另一个表,然后连接到自身,sql,oracle,join,powerbuilder,Sql,Oracle,Join,Powerbuilder,我正在使用连接到Oracle 9的PowerBuilder 12.5。我想选择通过emp\U nbr将我的employee表加入employee\U position表,然后使用该emp\U nbr再次加入employee表 但是,我不想像下面那样使用employee_copy表,因为它很快就会被取下。这里有一张图片说明了我想做什么: 我不确定是否应该使用嵌套选择,或者这是否仅适用于内部联接。因此,这段SQL代码有效,我成功地检索到了主管的姓名: SELECT "EMPLOYEE"."EMP

我正在使用连接到Oracle 9的PowerBuilder 12.5。我想选择通过emp\U nbr将我的employee表加入employee\U position表,然后使用该emp\U nbr再次加入employee表

但是,我不想像下面那样使用employee_copy表,因为它很快就会被取下。这里有一张图片说明了我想做什么:

我不确定是否应该使用嵌套选择,或者这是否仅适用于内部联接。因此,这段SQL代码有效,我成功地检索到了主管的姓名:

 SELECT "EMPLOYEE"."EMP_NBR",   
         "EMPLOYEE"."DEPT_NBR",   
         "EMPLOYEE"."SHOP",   
         "EMPLOYEE"."LAST_NAME",   
         "EMPLOYEE"."FIRST_NAME",   
         "EMPLOYEE"."MIDDLE_INITIAL",   
         "EMPLOYEE"."EMP_CLASS",   
         "EMPLOYEE_POSITION"."EMP_SUPERVISOR_ID",   
         "EMPLOYEE_COPY"."LAST_NAME",   
         "EMPLOYEE_COPY"."FIRST_NAME",   
         "EMPLOYEE_COPY"."MIDDLE_INITIAL"  
    FROM "EMPLOYEE",   
         "EMPLOYEE_POSITION",   
         "EMPLOYEE_COPY"  
   WHERE ( "EMPLOYEE"."EMP_NBR" = "EMPLOYEE_POSITION"."EMP_NBR" ) and  
         ( "EMPLOYEE_POSITION"."EMP_SUPERVISOR_ID" = "EMPLOYEE_COPY"."EMP_NBR" )

所以我的问题是:如果不使用employee\u copy表,我怎么做?此外,这必须在一个SQL查询中完成

没问题:自联接可以正常工作:

 SELECT "EMPLOYEE"."EMP_NBR",   
     "EMPLOYEE"."DEPT_NBR",   
     "EMPLOYEE"."SHOP",   
     "EMPLOYEE"."LAST_NAME",   
     "EMPLOYEE"."FIRST_NAME",   
     "EMPLOYEE"."MIDDLE_INITIAL",   
     "EMPLOYEE"."EMP_CLASS",   
     "EMPLOYEE_POSITION"."EMP_SUPERVISOR_ID",   
     "EMPLOYEE_MGR"."LAST_NAME" as mgr_last_name,   
     "EMPLOYEE_MGR"."FIRST_NAME" as mgr_first_name,   
     "EMPLOYEE_MGR"."MIDDLE_INITIAL" as mgr_last_name  
FROM "EMPLOYEE",   
     "EMPLOYEE_POSITION",   
     "EMPLOYEE" EMPLOYEE_MGR  
WHERE ( "EMPLOYEE"."EMP_NBR" = "EMPLOYEE_POSITION"."EMP_NBR" ) and  
     ( "EMPLOYEE_POSITION"."EMP_SUPERVISOR_ID" = "EMPLOYEE_MGR"."EMP_NBR" )

只需为EMPLOYEE_MGR的EMPLOYEE表使用别名即可。

没问题:自联接可以正常工作:

 SELECT "EMPLOYEE"."EMP_NBR",   
     "EMPLOYEE"."DEPT_NBR",   
     "EMPLOYEE"."SHOP",   
     "EMPLOYEE"."LAST_NAME",   
     "EMPLOYEE"."FIRST_NAME",   
     "EMPLOYEE"."MIDDLE_INITIAL",   
     "EMPLOYEE"."EMP_CLASS",   
     "EMPLOYEE_POSITION"."EMP_SUPERVISOR_ID",   
     "EMPLOYEE_MGR"."LAST_NAME" as mgr_last_name,   
     "EMPLOYEE_MGR"."FIRST_NAME" as mgr_first_name,   
     "EMPLOYEE_MGR"."MIDDLE_INITIAL" as mgr_last_name  
FROM "EMPLOYEE",   
     "EMPLOYEE_POSITION",   
     "EMPLOYEE" EMPLOYEE_MGR  
WHERE ( "EMPLOYEE"."EMP_NBR" = "EMPLOYEE_POSITION"."EMP_NBR" ) and  
     ( "EMPLOYEE_POSITION"."EMP_SUPERVISOR_ID" = "EMPLOYEE_MGR"."EMP_NBR" )

只需在EMPLOYEE_MGR的EMPLOYEE表中使用一个别名。

不熟悉powerbuilder,但如果它不允许您指定别名,请dba创建一个名为EMPLOYEE_MGR的EMPLOYEE同义词。谢谢Mark,我明天早上会试一试。太棒了!它起作用了。您在
“员工\经理”“名为经理\名”上出现语法错误,
。我从来都不知道这种语法存在。在数据窗口画师的“语法”模式下,您可以在PowerBuilder中为数据窗口使用几乎任何ANSI SQL语法。您有两种选择。。。1.)在datawindow painter中使用语法模式,然后可以按照PB专家Matt的建议对表进行别名。2.)使用图形模式,进行第一次联接,然后右键单击,选择表格,再次选择员工表格,PB将放置员工表格的第二份副本。PB将使用自己的别名,但如果您想保持图形模式(这有一些优点,比如更好的多数据库支持),您可以做到这一点。不熟悉powerbuilder,但如果它不允许您指定别名,请dba创建一个名为employee_mgr的员工同义词。谢谢马克,我将在明天早上试一试。太棒了!它起作用了。您在
“员工\经理”“名为经理\名”上出现语法错误,
。我从来都不知道这种语法存在。在数据窗口画师的“语法”模式下,您可以在PowerBuilder中为数据窗口使用几乎任何ANSI SQL语法。您有两种选择。。。1.)在datawindow painter中使用语法模式,然后可以按照PB专家Matt的建议对表进行别名。2.)使用图形模式,进行第一次联接,然后右键单击,选择表格,再次选择员工表格,PB将放置员工表格的第二份副本。PB将使用自己的别名,但如果您想保持图形模式(有一些优势,比如更好的多数据库支持),您可以毫无问题地使用它。