sql - 在 Oracle 中创建 CTE

标签 sql oracle insert common-table-expression

我正在尝试创建一个 CTEOracle不是从现有表中选择,而是将数据插入其中。目前,我正在创建一个表,然后在 query 之后删除它。已经完成了。有没有办法创建 CTE有效地做同样的事情?这是我当前的代码:

create table RTG_YEARS
(YR date);

insert into RTG_YEARS values (to_date('2013-01-01', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2013-12-31', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2014-01-01', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2014-12-31', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2015-01-01', 'yyyy-mm-dd'));
insert into RTG_YEARS values (to_date('2015-12-31', 'yyyy-mm-dd'));

最佳答案

您可以通过从对偶中选择日期值并将它们合并在一起来创建您的公用表表达式(CTE、subquery factoring 等):

with RTG_YEARS (YR) as (
  select to_date('2013-01-01', 'yyyy-mm-dd') from dual
  union all select to_date('2013-12-31', 'yyyy-mm-dd') from dual
  union all select to_date('2014-01-01', 'yyyy-mm-dd') from dual
  union all select to_date('2014-12-31', 'yyyy-mm-dd') from dual
  union all select to_date('2015-01-01', 'yyyy-mm-dd') from dual
  union all select to_date('2015-12-31', 'yyyy-mm-dd') from dual
)
select * from RTG_YEARS;

YR       
----------
2013-01-01
2013-12-31
2014-01-01
2014-12-31
2015-01-01
2015-12-31

与它是 CTE 无关,但您可以通过使用 date literals 来减少输入。 :
with RTG_YEARS (YR) as (
  select date '2013-01-01' from dual
  union all select date '2013-12-31' from dual
  union all select date '2014-01-01' from dual
  union all select date '2014-12-31' from dual
  union all select date '2015-01-01' from dual
  union all select date '2015-12-31' from dual
)
select * from RTG_YEARS;

关于sql - 在 Oracle 中创建 CTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38775056/

相关文章:

java - 如何使用 JPA 的 JPQL 连接两个表

MySql 更新查询不适用于 ASP.NET 中的 EF6

java - 使用 Java 连接到 Oracle 数据库

C 将元素插入列表中给定索引处

PHP 会跳过检查并插入数据,即使数据已经存在

Mysql:同时插入

mysql 选择每个用户最近日期的行 - 使其更快

SQL 为嵌套选择创建别名列?

java - 使用 spring batch 在两台不同机器上处理文件

java - 在 Java 中对对象列表中的项目进行分组