一種選擇是避免使用LEAST
:
SELECT MIN(dt)
FROM (
SELECT full_date FROM lopes.vehicle_data UNION ALL
SELECT bithday FROM lopes.ad_trf_day UNION ALL
SELECT bithday FROM lopes.ad_day_rec UNION ALL
SELECT bithday FROM lopes.ad_day_rec UNION ALL
SELECT bithday FROM lopes.ad_day UNION ALL
SELECT bithday FROM lopes.ad_poi_day
)
這仍然會返回NULL
,但只有當所有的表都是空的,或者只包含NULL
值。
另一種是用COALESCE
,NVL
或CASE
:
select least(
(select COALESCE(min(full_date), DATE '9999-12-31') from lopes.vehicle_data),
(select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_trf_day),
(select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_day_rec),
(select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_day_rec),
(select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_day),
(select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_poi_day)
)
from dual
這將永遠不會返回NULL
,但如果所有的表是空的,或者只包含NULL
值將返回「神奇」的價值DATE '9999-12-31'
。
來源
2017-10-06 08:06:45
MT0
查看'coalesce()'。 – jarlh