【发布时间】:2014-06-15 11:19:00
【问题描述】:
在 Oracle 中,我有一个相当大的 select 语句。我想将它保存为一个视图,这样我就可以从 .NET 程序中调用它,并将它用作我们必须生成的一些统计数据的基础。使用视图时,它总是按日期过滤。
我想要这样的东西:
select * from my_view
where my_view.date = '2014-01-01';
问题是我需要在子查询的where条件中使用日期作为参数:
select * from table1
left outer join (
select * from table2
where table2.date = :somedate)
on table1.Id = table2.Id;
...不能做成视图。
有没有办法,我可以将日期比较移到子查询之外,而不会弄乱左外连接?
不该做什么:
这会创建一个内部连接 - 这不是我想要的:
select * from table1
left outer join
table2
on table1.Id = table2.Id
where table2.date = '2014-01-01';
此选择过滤掉 table1 中的行,这些行不在指定日期的行上连接,但在另一个日期的行上连接:
select * from table1
left outer join
table2
on table1.Id = table2.Id
where table2.Id is null
or table2.date = '2014-01-01';
【问题讨论】:
-
您可能想要一个表值函数而不是视图:oracle-base.com/articles/misc/pipelined-table-functions.php。
标签: sql oracle join subquery outer-join