Re: 'XYZ' AS in union query gives ORA-00918
Date: Mon, 21 Jul 2008 06:52:53 -0700 (PDT)
Message-ID: <e12b5de7-5ccf-46b7-93dc-a55a63c363db@s50g2000hsb.googlegroups.com>
On Jul 21, 7:41 am, Thomas Poenicke <poeni..._at_freenet.de> wrote:
> On Mon, 21 Jul 2008 05:13:41 -0700 (PDT), fitzjarr..._at_cox.net wrote:
> > We need to see what you've written for these 'other columns from'
> > parts of the UNION; you should have posted the entire query as
> > written.
>
> > Do so, as we can't know what your issues are until you post that
> > entire query text.
>
> > David Fitzjarrell
>
> Ok, here an symbolic view on the objects:
>
> TABLE A holds the data in the db:
> ( ID NUMBER NOT NULL,
> NAME VARCHAR2(50) NOT NULL,
> STATUS VARCHAR2(10),
> DEPARTMENT VARCHAR2(20)
> )
>
> TABLE B contains the data uploaded with sqlldr
> (
> NAME VARCHAR2(50),
> STATUS VARCHAR2(10),
> DEPARTMENT VARCHAR2(20)
> )
>
> VIEW V shows only the different rows:
> SELECT
> A.ID, A.NAME, B.STATUS, B.DEPARTMENT
> FROM A, B
> WHERE A.NAME=B.NAME
> MINUS
> SELECT
> ID,NAME,STATUS,DEPARTMENT
> FROM A
>
> Now i want to display the changed data like this:
>
> changed row: id, name, status, department
> old row : id, name, status, department
>
> with this view:
> SELECT * FROM V
> UNION
> SELECT * FROM A WHERE ID IN(SELECT ID FROM V)
> ORDER BY 1 -- ordered by id
>
> This view is tested and shows the results as expected.
>
> If i try the following:
>
> SELECT 'UP' AS SRC,ID,NAME,STATUS,DEPARTMENT FROM V
> UNION
> SELECT 'DB' AS SRC,ID,NAME,STATUS,DEPARTMENT FROM A WHERE ID IN(SELECT
> ID FROM V)
> ORDER BY 1
>
> the ORA-00918 occurs.
>
> Maybe there is another way to display the changes, so i'am not afraid
> of any hints and suggestions.
>
> Thanks in advance.
> Thomas
I do not get the error you report:
SQL> create table a
2 ( ID NUMBER NOT NULL,
3 NAME VARCHAR2(50) NOT NULL,
4 STATUS VARCHAR2(10),
5 DEPARTMENT VARCHAR2(20)
6 )
7 /
Table created.
SQL>
SQL> create table b
2 (
3 NAME VARCHAR2(50),
4 STATUS VARCHAR2(10),
5 DEPARTMENT VARCHAR2(20)
6 )
7 /
Table created.
SQL>
SQL> insert into a
2 select empno, ename, 'CURRENT', dname from emp e, dept d where
e.empno <=7900 and d.deptno = e.deptno;
12 rows created.
SQL>
SQL> insert into b
2 select ename, 'CHANGED', dname from emp e, dept d where e.empno
<=7900 and d.deptno = e.deptno;
12 rows created.
SQL> SQL> SQL> create view v as
2 SELECT
3 A.ID, A.NAME, B.STATUS, B.DEPARTMENT 4 FROM A, B
5 WHERE A.NAME=B.NAME
6 MINUS
7 SELECT
8 ID,NAME,STATUS,DEPARTMENT
9 FROM A
10 /
View created.
SQL>
SQL> SELECT * FROM V
2 UNION
3 SELECT * FROM A WHERE ID IN(SELECT ID FROM V)
4 ORDER BY 1;
ID NAME STATUS DEPARTMENT ---------- -------------------------------------------------- ---------- -------------------- 7369 SMYTHE CHANGED RESEARCH 7369 SMYTHE CURRENT RESEARCH 7499 ALLEN CHANGED SALES 7499 ALLEN CURRENT SALES 7521 WARD CHANGED SALES 7521 WARD CURRENT SALES 7566 JONES CHANGED RESEARCH 7566 JONES CURRENT RESEARCH 7654 MARTIN CHANGED SALES 7654 MARTIN CURRENT SALES 7698 BLAKE
CHANGED SALES
ID NAME STATUS DEPARTMENT ---------- -------------------------------------------------- ---------- -------------------- 7698 BLAKE CURRENT SALES 7782 CLARK CHANGED ACCOUNTING 7782 CLARK CURRENT ACCOUNTING 7788 SCOTT CHANGED RESEARCH 7788 SCOTT CURRENT RESEARCH 7839 KING CHANGED ACCOUNTING 7839 KING CURRENT ACCOUNTING 7844 TURNER CHANGED SALES 7844 TURNER CURRENT SALES 7876 ADAMS CHANGED RESEARCH 7876 ADAMS
CURRENT RESEARCH
ID NAME STATUS DEPARTMENT ---------- -------------------------------------------------- ---------- -------------------- 7900 JAMES CHANGED SALES 7900 JAMES
CURRENT SALES 24 rows selected.
SQL>
SQL> SELECT 'UP' AS SRC,ID,NAME,STATUS,DEPARTMENT FROM V
2 UNION
3 SELECT 'DB' AS SRC,ID,NAME,STATUS,DEPARTMENT FROM A WHERE ID
IN(SELECT
4 ID FROM V)
5 ORDER BY 1
6 /
SR ID NAME STATUS DEPARTMENT -- ---------- -------------------------------------------------- ---------- -------------------- DB 7369 SMYTHE CURRENT RESEARCH DB 7499 ALLEN CURRENT SALES DB 7521 WARD CURRENT SALES DB 7566 JONES CURRENT RESEARCH DB 7654 MARTIN CURRENT SALES DB 7698 BLAKE CURRENT SALES DB 7782 CLARK CURRENT ACCOUNTING DB 7788 SCOTT CURRENT RESEARCH DB 7839 KING CURRENT ACCOUNTING DB 7844 TURNER CURRENT SALES DB 7876 ADAMS
CURRENT RESEARCH
SR ID NAME STATUS DEPARTMENT -- ---------- -------------------------------------------------- ---------- -------------------- DB 7900 JAMES CURRENT SALES UP 7369 SMYTHE CHANGED RESEARCH UP 7499 ALLEN CHANGED SALES UP 7521 WARD CHANGED SALES UP 7566 JONES CHANGED RESEARCH UP 7654 MARTIN CHANGED SALES UP 7698 BLAKE CHANGED SALES UP 7782 CLARK CHANGED ACCOUNTING UP 7788 SCOTT CHANGED RESEARCH UP 7839 KING CHANGED ACCOUNTING UP 7844 TURNER
CHANGED SALES
SR ID NAME STATUS DEPARTMENT -- ---------- -------------------------------------------------- ---------- -------------------- UP 7876 ADAMS CHANGED RESEARCH UP 7900 JAMES
CHANGED SALES 24 rows selected.
SQL> Apparently this isn't the same query you're running.
David Fitzjarrell Received on Mon Jul 21 2008 - 08:52:53 CDT