代码之家  ›  专栏  ›  技术社区  ›  Aymen Kanzari

sql oracle-区分所有列

  •  0
  • Aymen Kanzari  · 技术社区  · 4 年前

    我有下面两张表。我想获取fk_class的第一个char包含在number数组中的所有模块。

    ESP_模块

    moduleId  label
    AJ-03     xxxx
    PTM-01    yyyy
    AN-10     wwww
    

    ESP_MODULE_CLASS

    assignId  fk_class fk_module
    1           1EM1     AJ-03
    2           1EM2     AJ-03
    3           2A1      AN-10
    4           2A2      AN-10
    5           5GC1     AN-10
    6           5GC1     PTM-01
    7           5GC3     PTM-01
    

    我尝试了以下查询,但得到了一个重复的值。

    查询

    select * from ESP_MODULE m inner join ESP_MODULE_CLASS mc ON mc.fk_module = m.moduleId WHERE SUBSTR(mc.fk_class,1,1) IN (1,2);
    
    1 回复  |  直到 4 年前
        1
  •  0
  •   Gordon Linoff    4 年前

    你只是想 exists ?

    select m.*
    from ESP_MODULE m 
    where exists (select 1
                  from ESP_MODULE_CLASS mc 
                  where mc.fk_module = m.moduleId and
                        SUBSTR(mc.fk_class, 1, 1) IN ('1', '2')
                 );
    

    请注意 substr() 返回一个字符串,因此正确的比较是字符串。您可能会发现将该条件编写为正则表达式更容易:

    where regexp_like(mc.fk_class, '^[12]')