首页 > 解决方案 > 我无法从以下语句中检索确切数据

问题描述

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

标签: sqloracle

解决方案


有几个错误:

  • 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

或者尝试使用 group by 而不是多个连接,如下所示:

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

干杯!!


推荐阅读