WITH子句在ORACLE中使用UNION ALL 11G

WITH子句在ORACLE中使用UNION ALL 11G

问题描述:

您可以给我替代查询下面的代码。WITH子句在ORACLE中使用UNION ALL 11G

PLSQL代码

我有一个条款变量TEMP使用的,使用两个地在UNION ALL查询,有利于降低只有一个使用TEMP变量UNION ALL查询的时候,

DECLARE 

    CURSOR CUR Is 
    WITH TEMP AS  
    (SELECT 1 ONE FROM DUAL UNION ALL SELECT 2 ONE FROM DUAL) 
    SELECT RNO, NAME FROM STUDENT, TEMP T WHERE RNO = T.ONE 
    UNION ALL 
    SELECT RNO, NAME FROM STUDENT1, TEMP T WHERE RNO = T.ONE; 
BEGIN 

    FOR I IN CUR LOOP 
    DBMS_OUTPUT.PUT_LINE(I.RNO||':'||i.name); 
    END LOOP; 

END; 

表创建脚本

create table student1(rno number,name varchar2(30))  

insert into student1 values(1,'chidam1')  
insert into student1 values(2,'ram1')  
insert into student1 values(3,'divi1') 

create table student(rno number,name varchar2(30)) 

insert into student values(1,'chidam') 
insert into student values(2,'ram') 
insert into student values(3,'divi') 
+1

我们可以看到你的代码的作用:你需要解释它的目的。直到您告诉我们您要实现的目标,我们才能提供其他实施方案。 – APC

就像乘法是分配了另外的代数和笛卡尔乘积是分配了工会在集合论,所以INNER JOIN在SQL中的分配是UNION ALL

你可以重写你的SELECT声明,如下所示:

with 
    temp   as (... - your definition here ) 
    , student_union as (select rno, name from student 
         UNION ALL 
         select rno, name from student1) 
select s.rno, s.name from student_union s inner join temp t on s.rno = t.one 
........................ 

的几个注意事项...使用ANSI连接语法(SQL标准)尽可能不使用旧的,过时的Oracle语法。另外,对连接中的所有列使用限定符(表别名),即使它们并非总是非常必要;该代码更容易阅读。