Re: 'XYZ' AS in union query gives ORA-00918

From: <fitzjarrell_at_cox.net>
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

Original text of this message