我创建了以下查询:
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年之前以相应的日期结束;如果没有相应的日期,则-
,这是预期的结果。
但是,在我看来,查询太复杂了,我找不到更简单的方法。如果你能帮我简化它,我将不胜感激 非常感谢你。
答案 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;