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')
答
就像乘法是分配了另外的代数和笛卡尔乘积是分配了工会在集合论,所以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语法。另外,对连接中的所有列使用限定符(表别名),即使它们并非总是非常必要;该代码更容易阅读。
我们可以看到你的代码的作用:你需要解释它的目的。直到您告诉我们您要实现的目标,我们才能提供其他实施方案。 – APC