Oracle查询中的右连接

Oracle查询中的右连接,oracle,Oracle,我有一个大型Oracle查询,但我希望在下面的代码行中有一个右连接,我尝试使用(+),但不起作用: AND SUBSTR(IBT_LINE.USER_1, 0, INSTR(IBT_LINE.USER_1, '-', +1, 3)-1) = SUBSTR(WORK_ORDER.USER_1, 0, INSTR(WORK_ORDER.USER_1, '-', +1, 3)-1) 总查询: FROM CUSTOMER_ORDER, IBT, IBT_LINE,PART, WORK_O

我有一个大型Oracle查询,但我希望在下面的代码行中有一个
右连接
,我尝试使用(+),但不起作用:

AND SUBSTR(IBT_LINE.USER_1, 0, INSTR(IBT_LINE.USER_1, '-', +1, 3)-1) =
  SUBSTR(WORK_ORDER.USER_1, 0, INSTR(WORK_ORDER.USER_1, '-', +1, 3)-1) 
总查询:

FROM
    CUSTOMER_ORDER, IBT, IBT_LINE,PART, WORK_ORDER
WHERE
    CUSTOMER_ORDER.ID = REPLACE(IBT.ID,'X','C') 
    AND IBT.ID = IBT_LINE.IBT_ID
    AND IBT_LINE.PART_ID=PART.ID
    AND SUBSTR(IBT_LINE.USER_1, 0, INSTR(IBT_LINE.USER_1, '-', +1, 3)-1) = SUBSTR(WORK_ORDER.USER_1, 0, INSTR(WORK_ORDER.USER_1, '-', +1, 3)-1) 
    AND WORK_ORDER.WAREHOUSE_ID ='MEX-04' AND WORK_ORDER.STATUS  ='R'

不可能对两个表进行右/左连接,并且在同一个select中该表的字段上有一个强制值。 您的问题不在于sintax(+或JOIN),而在于您的选择

您试图在WORK_ORDER和IBT_LINE中获得外部联接,但您告诉oracle使用以下语句进行完全联接:

。。。。 和工单.WAREHOUSE\u ID='MEX-04'和工单.STATUS='R'

您可以尝试从中选择子选项

....
FROM
    CUSTOMER_ORDER, IBT, IBT_LINE,PART, 
     (SELECT SUBSTR(WORK_ORDER.USER_1, 0, INSTR(WORK_ORDER.USER_1, '-', +1, 3)-1) user_1_formatted 
              from WORK_ORDER 
              where WORK_ORDER.WAREHOUSE_ID ='MEX-04' 
              AND WORK_ORDER.STATUS  ='R') sub_work_order
WHERE
CUSTOMER_ORDER.ID = REPLACE(IBT.ID,'X','C') 
    AND IBT.ID = IBT_LINE.IBT_ID
    AND IBT_LINE.PART_ID=PART.ID
    AND SUBSTR(IBT_LINE.USER_1, 0, INSTR(IBT_LINE.USER_1, '-', +1, 3)-1) = sub_work_order.user_1_formatted(+)
或者选择一个子集,然后根据需要过滤结果

select *
from (select ... from 
    CUSTOMER_ORDER, IBT, IBT_LINE,PART, WORK_ORDER
WHERE
    CUSTOMER_ORDER.ID = REPLACE(IBT.ID,'X','C') 
    AND IBT.ID = IBT_LINE.IBT_ID
    AND IBT_LINE.PART_ID=PART.ID
    AND SUBSTR(IBT_LINE.USER_1, 0, INSTR(IBT_LINE.USER_1, '-', +1, 3)-1) = SUBSTR(WORK_ORDER.USER_1, 0, INSTR(WORK_ORDER.USER_1, '-', +1, 3)-1) (+))
  where (work_order is null or (WORK_ORDER.WAREHOUSE_ID ='MEX-04' AND WORK_ORDER.STATUS  ='R'))

您使用的是什么版本的Oracle?为什么不使用JOIN语法而不是(+)?您要检索哪些额外的行?我尝试使用JOIN,但不起作用。即使IBT_行表上不存在类似的联合代码,我也希望获得工作订单表中的所有信息。请定义“不工作”?给出错误?返回与所需结果不同的结果?