我无法从下面的语句中检索确切的数据

时间:2019-12-17 01:47:19

标签: sql oracle

SELECT  ST_CODE.ST_NAME "CURRENT ST",
    ST_CODE.ST_NAME "PREVIOUS ST" FROM FLT_TBL       
    LEFT JOIN MT_ST_CODE ON
        FLT_TRN_TBL. PIS_DB_VER = MT_ST_CODE.VERSION AND
        FLT_TRN_TBL. CRNT_ST_CODE = MT_ST_CODE.ST_CODE
    LEFT JOIN MT_ST_CODE ON
        FLT_TRN_TBL. PIS_DB_VER = MT_ST_CODE.VERSION AND
        FLT_TRN_TBL. PREV_ST_CODE = MT_ST_CODE.ST_CODE

1 个答案:

答案 0 :(得分:0)

有几个错误:

  • FLT_TRN_TBL是未知别名
  • ST_CODE是未知别名
  • 您必须为MT_ST_CODE赋予别名

您的查询应如下所示:

SELECT M1.ST_NAME "CURRENT ST",
       M2.ST_NAME "PREVIOUS ST" 
  FROM FLT_TBL FLT_TRN_TBL     
LEFT JOIN MT_ST_CODE M1 ON
        FLT_TRN_TBL.PIS_DB_VER = M1.VERSION AND
        FLT_TRN_TBL.CRNT_ST_CODE = M1.ST_CODE
LEFT JOIN MT_ST_CODE M2 ON
        FLT_TRN_TBL.PIS_DB_VER = M2.VERSION AND
        FLT_TRN_TBL.PREV_ST_CODE = M2.ST_CODE

或者尝试使用分组依据,而不是如下所示的多个联接:

SELECT FLT_TRN_TBL.PIS_DB_VER 
       Max(case when FLT_TRN_TBL.CRNT_ST_CODE = MT_ST_CODE.ST_CODE then  MT_ST_CODE.ST_NAME end) as "CURRENT ST",
       Max(case when FLT_TRN_TBL.PREV_ST_CODE = MT_ST_CODE.ST_CODE then MT_ST_CODE.ST_NAME end) as "PREVIOUS ST" 
  FROM FLT_TBL  FLT_TRN_TBL
LEFT JOIN MT_ST_CODE 
  ON FLT_TRN_TBL.PIS_DB_VER = MT_ST_CODE.VERSION
Group by FLT_TRN_TBL.PIS_DB_VER

干杯!

相关问题