我必须将四个桌子连在一起,遇到了麻烦。目前我的查询是返回数据,但不是我需要的数据。我认为我没有将所有四个表正确地连接在一起。我如何正确地加入桌子?谢谢。

贾斯汀

我需要将CXADMIN.RO_FAILURE_DTL RFCXADMIN.RO_HIST RHsaadmin.sa_repair_part@elgsad rpsaadmin.sa_code_group_task_dtl @ELGSAD cg表连接在一起。

到目前为止,这是我的查询:

SELECT DISTINCT
     RF.REPAIR_ORD,
     RH.RECV_UNIT,
     RH.RECV_SERIAL_NBR,
     rf.created_date,
     RP.FAULT_CODE,
     RP.REPAIR_ACTION_CODE,
     cg.task_code
FROM
    CXADMIN.RO_FAILURE_DTL RF,
    CXADMIN.RO_HIST RH,
    saadmin.sa_repair_part@elgsad rp,
    saadmin.sa_code_group_task_dtl @ELGSAD cg
WHERE
    RF.REPAIR_ORD = RH.REPAIR_ORD
    and Rp.REPAIR_ORD = cg.REPAIR_ORD
    AND RF.FAILURE_CODE ='DISK'
    AND RH.CURR_FACILITY_ID ='23'
    AND RF.CREATED_DATE >'1-JUN-2010'
    AND RF.CREATED_DATE <  '1-dec-2010'
    AND (CG.TASK_CODE ='PHMD'
         OR CG.TASK_CODE ='PHSN'
         OR CG.TASK_CODE ='CHMD'
         OR  CG.TASK_CODE ='CHSN')

最佳答案

您的代码本质上是在进行交叉联接,但看起来您想要做的是内部联接。

SELECT DISTINCT
 RF.REPAIR_ORD,
 RH.RECV_UNIT,
 RH.RECV_SERIAL_NBR,
 rf.created_date,
 RP.FAULT_CODE,
 RP.REPAIR_ACTION_CODE,
 cg.task_code
FROM CXADMIN.RO_FAILURE_DTL RF
  INNER JOIN CXADMIN.RO_HIST RH ON RF.REPAIR_ORD = RH.REPAIR_ORD
  INNER JOIN saadmin.sa_repair_part@elgsad rp ON RF.REPAIR_ORD = rp.REPAIR_ORD
  INNER JOIN saadmin.sa_code_group_task_dtl @ELGSAD cg ON RF.REPAIR_ORD = cg.REPAIR_ORD
WHERE
 AND RF.FAILURE_CODE ='DISK'
 AND RH.CURR_FACILITY_ID ='23'
 AND RF.CREATED_DATE >'1-JUN-2010'
 AND RF.CREATED_DATE <  '1-dec-2010'
 AND (CG.TASK_CODE ='PHMD'
     OR CG.TASK_CODE ='PHSN'
     OR CG.TASK_CODE ='CHMD'
     OR  CG.TASK_CODE ='CHSN')

09-10 10:18