此表如何查询?

idflight_manager(执管单位)sub_feet(子机型)all_match(是否匹配)fleet(主机型)
1TAO319-3201320
2KHN319-320-321-3230320
3 321-323-320-3251320

如上表,需求:现在有个机型 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)请大家指点一下。

 

 

直接用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]

select decode(t.all_match,'1',t.sub_fleet,'0',t.fleet,'无匹配') as fleet

from t_flight_manager_fleet t

where 1 = 1
and t.flight_manager = 'KHN'
and (t.sub_fleet like '%320%' or t.fleet='320')