TengChenLi 2013-01-23 17:38
浏览 307
已采纳

此表如何查询?

id flight_manager(执管单位) sub_feet(子机型) all_match(是否匹配) fleet(主机型)
1 TAO 319-320 1 320
2 KHN 319-320-321-323 0 320
3   321-323-320-325 1 320

如上表,需求:现在有个机型 320  ,执管单位KHN   要去上表中匹配数据
规则是:allmatch ==1 是要匹配 subfeet 字段里的值   查询出subfeet的值
 allmatch ==0 是要匹配 feet 字段里的值   查询出feet的值,我现在是分2次查询,如下:

sql1:

select sub_fleet  from t_flight_manager_fleet t  where 1 = 1
   and t.flight_manager = 'KHN'
   and t.all_match = '1' and t.sub_fleet like '%320%';

 

sql2:

select fleet  from t_flight_manager_fleet t1  where 1 = 1 

    and t1.flight_manager = 'KHN'  

    and t1.all_match = '0' and t1.fleet='320';

现在的解决方案就是 去库里分2个sql查询,将查询的结果合并到一个list中再做处理,但考虑这种方式要查询2次数据库,如果数据量较大的话开销比较到,运行也慢,请问有没有写一条sql满足我的需求?(注意:不能使用union,union all)请大家指点一下。

 

 

  • 写回答

2条回答 默认 最新

  • liuyinhuan0409 2013-01-23 18:48
    关注

    直接用case是不是你想要的结果呢?或者Oracle的话直接用decode:

    [code="sql"]
    select case t.all_match when '1' then t.sub_fleet when '0' then t.fleet
    from t_flight_manager_fleet t
    where 1 = 1
    and t.flight_manager = 'KHN'
    and t.sub_fleet like '%320%'
    and t.fleet = '320';
    [/code]

    or
    [code="sql"]
    select decode(t.all_match, '1', t.sub_fleet, '0', t.fleet) fleet
    from t_flight_manager_fleet t
    where 1 = 1
    and t.flight_manager = 'KHN'
    and t.sub_fleet like '%320%'
    and t.fleet = '320';
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号