SQL简化了合并查询

时间:2014-04-28 10:27:03

标签: sql coalesce

我创建了以下查询:

select k.vname, k.nname, coalesce(
  to_char((
    select a1.ablaufdat
    from kunde k1
    natural join abonnement a1
    where k.vname = k1.vname and k.nname = k1.nname
    and a1.ablaufdat < to_date('01-01-2015', 'DD-MM-YYYY')
))
, '-')
from kunde k
left outer join abonnement a on k.knr = a.knr 
order by k.vname asc, k.nname asc;

它向我显示订阅的所有客户,其在2015年之前以相应的日期结束;如果没有相应的日期,则-,这是预期的结果。

但是,在我看来,查询太复杂了,我找不到更简单的方法。如果你能帮我简化它,我将不胜感激 非常感谢你。

1 个答案:

答案 0 :(得分:1)

你说每个kunde只能有一个abonnement。所以只需外连接,看看你是否有记录:

select k.knr, k.vname, k.nname,
  coalesce(to_char(a.ablaufdat), '-' ) as ablaufdatum
from kunde k 
left outer join abonnement a on a.knr = k.knr and a.ablaufdat < to_date('01-01-2015', 'DD-MM-YYYY')
order by k.vname asc, k.nname asc;