use an outer join in RowMatch

Hello world

I have an Obj from view to both entities like this:

SELECT t1.rowno, t2.type

OF table_ t1, t2 from table_2

WHERE t1.rowno (+) = t2.rowno

and t1.userId (+) =: bindVar

table_1 (Rowno, UserID)

table_2 (Rowno, type)

I have a table on this view of Obj on my page, when I add a new line of this view Obj, this line showed in the table while he should not appear (depending on where the view clause Obj).

according to this post https://forums.oracle.com/thread/2576480 I can use RowMatch, but here I don't know how to use an outer join in RowMatch.


Habib


Post edited by: Habib.Eslami

I guess that joy cannot use matching line in this case as it only lines matching already in memory, but without an outer join. This must be done before.

What you can try is to build the sql criteria yourself and add it to the query.  An example on how to do this at http://wp.me/pcBZk-5O

The example shows how to add a sql custom as a criterion.

Timo

Tags: Java

Similar Questions

  • Oracle: Use LEFT OUTER JOIN, but convert the data to an external list

    Hello, all,.

    I know it can be done; I just don't remember how I got it done, oh there are so many years.

    Assumes that the tables exist for groups and individuals.  People can belong to several groups.

    SELECT g.groupName, p.lastName || ', ' || p.firstName as fullName
    FROM groups g LEFT OUTER JOIN groupPersonAssociation gpa ON gpa.groupID = g.groupID
                  LEFT OUTER JOIN person p ON p.personID = gpa.personID
    ORDER BY g.groupName, fullName
    

    This gives us:

    Group One          Alpha, Daniel
    Group One          Bravo, Charles
    Group One          Charlie, Chuck
    Group Two          Beta, Alpha
    Group Two          Delta, Bonnie
    Group Three        Echo, Bunny
    Group Three        Golf, Samuel
    Group Three        November, Stan
    

    How word the SQL to get the data as:

    Group One          Alpha, Daniel | Bravo, Charles | Charlie, Chuck
    Group Two          Beta, Alpha | Delta, Bonnie
    Group Three        Echo, Bunny | Golf, Samuel | November, Stan
    

    V/r,

    ^_^

    I finally thought to it.  I was using incorrect keywords on Google.

    SELECT g.groupName, LISTAGG(p.lastName || ', ' || p.firstName,' | ') WITHIN GROUP (ORDER BY g.groupName) "fullName"
    FROM groups g LEFT OUTER JOIN groupPersonAssociation gpa ON ggpa.groupID = g.groupID
                  LEFT OUTER JOIN person p ON p.personID = gpa.personID
    GROUP BY g.groupName
    ORDER BY g.groupName, fullName  
    

    Just in case someone else is going through this same desire.

    HTH,

    ^_^

  • show on a monthly basis, using the outer join

    Hello

    I use an example of emp table to describe my problem here

    I made a request that is group by hiredate months and showing the sum of wages.

    as follows,

    Select
    TO_DATE (to_char(HireDate,'MON-RRRR'), MON-RRRR), sum (sal)
    Of
    EMP
    Group by
    TO_DATE (to_char(HireDate,'MON-RRRR'), MON-RRRR)
    SQL > /.

    TO_DATE (T SUM (SAL)
    --------- ----------
    FEBRUARY 1ST, 10 21000
    MARCH 1, 10 30000
    MAY 1, 10 43000
    1ST JUNE 10 70000

    what I want is to show also the months too where any recruitment made
    as
    month sum (sal)
    January 1 10 0
    FEBRUARY 1ST, 10 21000
    MARCH 1, 10 30000
    April 1, 10 0
    MAY 1, 10 43000
    1st June 10 0
    1ST JUNE 10 70000
    August 1 10 0
    0 01-sept.-10
    1 October 10 0
    1 November 10 0
    1 December 10 0

    I've tried doing another table with month AND use outer join, but failed to get the result

    any ideas will be appreciated

    Change the following query accordingly as directed by your data

    Select
    ADD_MONTHS (to_date (January 1, 2001 "," dd-MON-RRRR'), level - 1) MonthName
    Of
    Double
    connect by level<=>

    It gives data for 2001
    If your emp table is to have 2010 data while it was being replaced by add_months (to_date (January 1, 2010 "," dd-MON-RRRR'), level - 1) MonthName

    Alexander gelin
    http://nimishgarg.blogspot.com

    Edited by: Caroline Geffroy 10 June 2010 18:11

  • Using Left Outer Join with reference

    I have three tables.
    Table 1: BOOK_DETAILS
    Fields: BOOK_ID, BOOK_NAME

    Table 2: BOOK_ISSUE_RECORD
    Fields: BOOK_ID, USER_NAME

    Table 3: BOOK_AUTHOR
    Fields: BOOK_ID, AUTHOR_NAME

    I must link table 1 and table 2 with a left outer join, because even if the book is not the questions to anyone, his name should come.
    I have once again display the name of the author of books for each book.
    I am able to create a query with the left outer join between table 1 and table 2. However, I am not able to give a reference to Table 3.
    Can someone help me with this please.

    Concerning
    Hawker
    select  d.book_name,
            a.book_author,
            i.user_name
      from       book_details d
            join
                 book_author a
              on (d.book_id = a.book_id)
            left join
                 book_issue_recors i
              on (d.book_id = i.book_id)
    /
    

    SY.

  • He had to know the right outer join using...

    He had to know the right outer join using...

    For example: first query left outer join for the emp table: SELECT EMPNO, ENAME, D.DEPTNO FROM EMP E, Department D WHERE the E.DEPTNO = D.DEPTNO)

    Second query left outer join for the Dept table: SELECT EMPNO, ENAME, D.DEPTNO FROM EMP E, Department D WHERE the D.DEPTNO = E.DEPTNO)

    In the example above I just Exchange where condition condition to get an outer join of two table with a left outer join itself. Wat is use right outer join, instead, I can swap the status of table name for the result. Please suggest...

    Hello

    chan001 wrote:

    He had to know the right outer join using...

    For example: first query left outer join for the emp table: SELECT EMPNO, ENAME, D.DEPTNO FROM EMP E, Department D WHERE the E.DEPTNO = D.DEPTNO)

    Second query left outer join for the Dept table: SELECT EMPNO, ENAME, D.DEPTNO FROM EMP E, Department D WHERE the D.DEPTNO = E.DEPTNO)

    In the example above I just Exchange where condition condition to get an outer join of two table with a left outer join itself. Wat is use right outer join, instead, I can swap the status of table name for the result. Please suggest...

    The two examples above use the old syntax outer join of Oracle. (I guess there should be a sign inside the parentheses, e.g.. +)

    ...  WHERE E.DEPTNO = D.DEPTNO (+)

    )

    The LEFT OUTER JOIN and RIGHT OUTER JOIN terms apply only to the ANSI join syntax, e. g.

    .

    .. FROM EMP E

    DEPT LEFT OUTER JOIN D ON E.DEPTNO = D.DEPTNO

    As Blushadow said above, there's no real point in having LEFT OUTER JOIN and RIGHT OUTER JOIN;  What you can do with one (or a combination of both) can be done with the other.  Most people use LEFT OUTER JOIN systematically and never use RIGHT OUTER JOIN.

    There are situations where using a combination of the two would mean a little less striking, but only a little less and this kind of situation is very common, and one may wonder if the somewhat shorter code is more specific.  I suggest that forget you RIGHT OUTER JOIN.

  • Effort using Outer join parent-child relationship

    Oracle Database 10 g Express Edition Release 10.2.0.1.0 - product

    I have the following tables

    CREATE TABLE  "ADDPROJECT" 
       (     "PROJID" VARCHAR2(30) NOT NULL ENABLE, 
         "PROJNAME" VARCHAR2(30), 
         "PROJSTARTDATE" DATE, 
         "PROJENDDATE" DATE, 
         "PARENTPROJID" VARCHAR2(30), 
         "PROJTYPE" VARCHAR2(30), 
         "PROJSTATUS" VARCHAR2(30), 
          PRIMARY KEY ("PROJID") ENABLE
       )
    
    CREATE TABLE  "ALLOCATEASSOCIATES" 
       (     "PROJID" VARCHAR2(30) NOT NULL ENABLE, 
         "ASSOCIATEID" NUMBER(*,0) NOT NULL ENABLE, 
         "ALLOCATIONSTARTDATE" DATE, 
         "ALLOCATIONPERCENT" NUMBER(*,0), 
         "ENDDATE" DATE, 
          PRIMARY KEY ("PROJID", "ASSOCIATEID") ENABLE
       )
    
    CREATE TABLE  "ADDRESEARCHAREA" 
       (     "RAID" VARCHAR2(30) NOT NULL ENABLE, 
         "RANAME" VARCHAR2(30), 
         "RASTARTDATE" DATE, 
         "RAENDDATE" DATE, 
         "PARENTRAID" VARCHAR2(30), 
         "RASTATUS" VARCHAR2(30), 
          PRIMARY KEY ("RAID") ENABLE
       )
    
    CREATE TABLE  "PROJECTTORAASSOCIATION" 
       (     "RAID" VARCHAR2(30) NOT NULL ENABLE, 
         "PROJID" VARCHAR2(30) NOT NULL ENABLE, 
         "STARTDATE" DATE, 
         "ENDDATE" DATE, 
         "STATUS" VARCHAR2(30), 
          PRIMARY KEY ("RAID", "PROJID") ENABLE
       )
    
    insert into addresearcharea values ('ra1','raname1',to_date('04/01/2012','mm/dd/yyyy'),'','','Active')
    insert into addresearcharea values ('ra2','raname2',to_date('04/01/2012','mm/dd/yyyy'),'','','Active')
    insert into addresearcharea values ('ra3','raname3',to_date('04/01/2012','mm/dd/yyyy'),'','','Active')
    insert into addresearcharea values ('ra4','raname4',to_date('04/01/2012','mm/dd/yyyy'),'','ra1','Active')
    insert into addresearcharea values ('ra5','raname5',to_date('04/01/2012','mm/dd/yyyy'),'','ra1','Active')
    insert into addresearcharea values ('ra6','raname6',to_date('04/01/2012','mm/dd/yyyy'),'','ra2','Active')
    
    insert into addproject values ('proj1','projname1',to_date('04/01/2012','mm/dd/yyyy'),'','','Research','Active')
    insert into addproject values ('proj2','projname2',to_date('04/01/2012','mm/dd/yyyy'),'','','Research','Active')
    insert into addproject values ('proj3','projname3',to_date('04/01/2012','mm/dd/yyyy'),'','','Research','Active')
    
    insert into projecttoraassociation values ('ra1','proj1',to_date('04/01/2012','mm/dd/yyyy'),'','Active')
    insert into projecttoraassociation values ('ra4','proj1',to_date('04/01/2012','mm/dd/yyyy'),'','Active')
    insert into projecttoraassociation values ('ra2','proj2',to_date('04/01/2012','mm/dd/yyyy'),'','Active')
    insert into projecttoraassociation values ('ra3','proj3',to_date('04/01/2012','mm/dd/yyyy'),'','Active')
    
    insert into allocateassociates values ('proj1',1,to_date('04/01/2012','mm/dd/yyyy'),100,'')
    insert into allocateassociates values ('proj1',2,to_date('04/01/2012','mm/dd/yyyy'),100,'')
    insert into allocateassociates values ('proj2',3,to_date('04/01/2012','mm/dd/yyyy'),100,'')
    In short, here is the data

    Research areas: ra1, ra2, ra3
    Void / areas of research for AM1: ra4, ka5
    Void / areas of research for ra2: qxf6
    Void / areas of research for ra3: -.

    Projects - proj1, proj2.proj3

    Mapping of the area of research projects
    Proj1: ra1 and ra4
    Proj2: ra2

    Associate the allocation
    Proj1: 1,2
    Proj2: 3

    I need to get wise effort search space and subarea displayed on the same row (if the project is also associated with the search of sub box)
    The user must be able to choose a particular area of research and the results displayed accordingly
    Results expected in the cases where no specific research field are selected
    EFFORT PROJECTID PROJECTNAME RANAME SUBRANAME 
    12.70 proj1 projname1 raname1 ra4 
    6.35 proj2 projname2 raname2 - 
    - proj3 projname3 raname3 - 
    Production in the event of main search box is selected (for example:-ra1)
    EFFORT PROJECTID PROJECTNAME RANAME SUBRANAME 
    12.70 proj1 projname1 raname1 ra4 
    The expected results in the area of research case void are selected (for example:-ra4)
    EFFORT PROJECTID PROJECTNAME RANAME SUBRANAME 
    12.70 proj1 projname1 raname1 ra4 
    The query I wrote
    SELECT 
    to_char(
        SUM(
           (MONTHS_BETWEEN(
                   1+LEAST(
                      LEAST(
                         LEAST(
                              nvl(ar.raenddate,to_date('04/01/2100','mm/dd/yyyy'))
                              ,nvl(pr.enddate,to_date('04/01/2100','mm/dd/yyyy')))
                      ,nvl(aa.enddate,to_date('04/01/2100','mm/dd/yyyy')))
                  ,sysdate),
                  GREATEST(
                     GREATEST(
                        GREATEST(
                                ar.rastartdate
                                ,pr.startdate)
                           ,aa.allocationstartdate)
                  ,to_date('04/01/2012','mm/dd/yyyy'))) 
        * aa.allocationpercent / 100 
        ))
      ,999.99)    AS EFFORT,
    aa.projid AS PROJECTID,
    ap.projname AS PROJECTNAME,
    ar.raname AS RANAME,
    ar2.raid AS SUBRANAME
    FROM AllocateAssociates aa,ProjecttoRAAssociation pr,addProject ap,AddResearchArea ar, AddResearchArea ar2
    WHERE pr.projid = aa.projid (+)
    AND aa.projid = ap.projid 
    AND pr.raid = ar.raid
    AND ar.raid = ar2.parentraid (+)
    group by aa.projid,ap.projname,ar.raname,ar2.raid
    The problems I am facing
    1. I need to get a list of projects that are associated with the search box even if they have no allocation of project. Although I used the outer join, I don't get this result. I used the full outer join, but gave the expected result. (Since there are several tables to assemble. maybe something wrong to join to?) (in the above data, proj3 must also be displayed even if it doesn't have an allocation of project)
    2. If a search box has more than one field of research, there are 2 entries for each sub research field even if the project has been associated with the search under a single box (in the above data, the proj1 has been associated with ra4 only, but the results display the ra4 and ka5)
    3. the query shows two entries for the main research area and one for the research sub area (provided that the project is associated with the correct principal and under research field). But there should be just an entry in a space research containing the name of the two main and under research field

    Please help me to solve these problems.
  • Left Outer Join DR.

    Hi Experts,

    I have a requirement that says - see the chart for the past 10 days, regardless the presence data table in fact.
    Lets consider an example - Time_dim product, are my dimension tables, Purchase_Order is my fact table.

    I did it for external Purchase_Order in left RPD with TIME_DIM and inner join with the PRODUCT table.  and execution of query of exit-
    Select T.Date, P.item, count (distinct PO.order_no)
    TIME_DIM t, PRODUCT P, PURCHASE_ORDER PO
    where T.date_key = PO.date_key
    and P.item = in. agenda
    and P.item = 'laptop ';

    The query generated by OBIEE left outer join, but when the condition P.item = "Notebook" included in the query, and if there are no orders for this product in one of the date, that date will not come in the result set.

    the query to be generated by the OBIEE is-


    Select T.Date, PO.item, count (distinct PO.order_no)
    TIME_DIM t,.
    (SELECT P.ITEM, IN. ORDER_NO
    PRODUCT P, PO PURCHASE_ORDER
    WHERE P.item = in. agenda
    and P.item = 'Laptop') IN.
    WHERE T.date_key = PO.date_key (+);

    How to design the RPD to achieve this. All pray to advise on this. Thanks in advance.

    Thank you
    Chantal

    Hello

    You are on 11.1.1.7?

    I would say that your condition can be made without using external and maintenance of product and the standard between the FACT dimension, time inner join join.

    If you enable your property analysis OBIEE "Include Null values" will automatically return all the elements of time and product matching your filter (so you'll need to add a filter on 'Date' to limit it to the last 10 days or you will have a unique day of your time dimension).

    If you filter then on "Laptop", even if there is not a single value in order for "Laptop" in the last 10 days, he will be there on the screen.

    Easy, clean and you keep your inner join between the facts and Dimensions.

    Take a look at this example, I just did on SampleApp 406:

    Selection of 12 months (year 2010) and a customer (id = 89) and income. The model has only an inner join. I activate the option "Include Null values" and here is the result.

    A line with cells only empty because there is not a single revenue for customer 89 in 2010. This is exactly your condition.

    Honestly, do not touch your model using the outer join, you will have more side effects than benefits. Every single scan will do the outer join and you'll have a lot of data 'empty' return of the DB (more large data set containing just the null values) and probably you need the outer join in 15 to 25% of your analysis.

    Keep things simple, it will be faster and easier to maintain.

  • Outer join on the Filter Condition

    Hello

    I would like to show all rows in a query for two conditions to filter on the 'status '. I used an outer join on the outer query to return the values inside the inline query, but it returns not to return all rows.

    create table (test)
    ID number,
    start_date date,
    status varchar2 (1).
    number of amount,
    number of cust_type
    );


    Insert test values (001, June 1, 2014 ", am ', 189, 78");
    Insert test values (001, March 26, 2014 ", 'R', 175, 4");
    Insert test values (001, December 1, 2014 ", 'R', 89, 91");
    Insert test values ("001, 13 August 2014 ', 'J', 19, 2);
    Insert test values (001, 12 August 2014 ', 'E', 19, 2);

    Insert test values (002, January 1, 2014 ', 'R', 17, 4);
    Insert test values (002, 26 June 2014 ", 'R', 175, 4");
    Insert test values (' 002, February 1, 2014 ', 'J', 9, 8);
    Insert test values (002, 13 October 2014 ', ', 190, 2);

    Insert test values (' 003, June 1, 2014 ', 'J', 189, 78);
    Insert test values (003, March 26, 2014 ", 'R', 175, 4");
    Insert test values (003, December 1, 2014 ", 'R', 89, 91");
    Insert test values (' 003, 13 August 2014 ', 'J', 19, 2);
    Insert test values (' 003, 12 August 2014 ', 'J', 19, 2);

    commit;

    Select i.ids, i.start_date, i.cust_type, i.amount as gross_amount, i.amount + ii.amount as net_amount
    test I have,
    (select id, amount)
    of the test
    where (status = status or 'R' = 'J')) ii
    where i.cust_type in (4, 78, 91, 2, 4, 8)
    and i.ids (+) = ii.ids
    and i.status (+) to (', 'E')
    "and i.start_date between 1 January 14 ' and 31-dec-2014."

    The query above exclude ID 003 because there is that no status (M / E) butI want always display all codes, even if the condition is not consistent

    Hello

    Want results from an inner join to match identifiers, but the results of an outer join for identifiers that are not?  In other words, you want to include the rows of the table I only when one of the following is true:

    The line of table I have ticked all the boxes, or

    No line in not table i with the same ID meets all conditions

    ?

    If so, here's a way to do it:

    WITH got_rnk AS

    (

    Select i.ids, i.start_date, i.cust_type

    , nvl2 (ii.ids, i.amount, 0) as gross_amount

    , i.amount + nvl (ii.amount, 0) as net_amount

    dense_rank () over (partition of i.ids

    order of nvl2 (ii.ids, 'A', 'B')

    ) as rnk

    I have test

    (in left outer join

    SELECT ID, amount

    of the test

    where status ('R', 'J')

    ) ii on i.ids = ii.ids

    and i.cust_type in (4, 78, 91, 2, 4, 8)

    and i.start_date between to_date (January 1, 2014 ", 'dd-mon-yyyy')

    and to_date (31-dec-2014', 'dd-mon-yyyy')

    and i.status in (', 'E')

    )

    SELECT ID, start_date, cust_type

    gross_amount, net_amount

    of got_rnk

    where rnk = 1

    ;

    Results of your sample data:

    ID START_DATE GROSS_AMOUNT NET_AMOUNT CUST_TYPE

    --------- ----------- ---------- ------------ ----------

    1 1 June 2014 78 189 364

    1 1 June 2014 78 189 278

    1 1 June 2014 78 189 208

    1 12 August 2014 2 19 38

    1 12 August 2014 2 19 108

    1 12 August 2014 2 19 194

    2 13 October 2014 2 190 207

    2 13 October 2014 2 190 365

    2 13 October 2014 2 190 199

    3 March 26, 2014 4 0 175

    3 1 June 2014 78 0 189

    3 12 August 2014 2 0 19

    3 August 13, 2014 2 0 19

    3 1 December 2014 91 0 89

  • Max() with outer join

    I have a couple of tables XX_PERS and XX_ADDRESS as shown below. I would like to return more recent 'city' for each person on the xx_pers table. If no record matching in xx_address, there should always be the id of the person, name of city as null.

    CREATE TABLE xx_pers

    (Key primary ID number,)

    name varchar2 (100)

    );

    CREATE TABLE xx_address

    (

    addr_id PRIMARY KEY NUMBER,

    pers_id NUMBER,

    City VARCHAR2 (25).

    FOREIGN KEY (pers_id) REFERENCES xx_pers (id)

    );

    insert into xx_pers values (1, 'Messi');

    insert into xx_pers values (2, 'Muller');

    insert into xx_pers values (3, 'Ronaldo');

    insert into xx_address values (100.1, "Argentina");

    insert into xx_address values (102.1, "Madrid");

    insert into xx_address values (101.2, "Germany");

    insert into xx_address values (103.2, "Munich - OF");

    The following query returns the most recent 'city' for person 1 and 2 but do not know how to get the 3rd person.

    SELECT ID, name, city

    of xx_pers xx

    , xx_address y

    Where xx.id = y.pers_id

    and y.addr_id in (select max (addr_id) of the xx_address by pers_id group);

    Hello

    Here is another way, which is similar to what you have tried initially, but it uses an outer join to a subquery instead of an IN subquery:

    WITH got_max_addr_id AS

    (

    SELECT pers_id

    MAX (addr_id) AS max_addr_id

    OF xx_address

    GROUP BY pers_id

    )

    SELECT p.id

    p.name

    a.city

    OF xx_pers p

    LEFT OUTER JOIN got_max_addr_id ON m.pers_id = p.id m

    A LEFT OUTER JOIN xx_address ON a.pers_id = m.pers_id

    AND a.addr_id = m.max_addr_id

    ORDER BY p.id

    ;

    It is also very similar to the solution in response #2 above.

    Note Although all 4 of these solutions something in common that is different from the query you posted: they use all of the outer joins.  You obviousy has estimated that an outer join outer join would be useful here, because you mentioned an outer join in the title of the thread, but you are not one yourself.

  • Need for outer join

    Hi gurus

    Need your advice once again.

    I have following script.

    Table creation and Insertion.

    drop table full_data;

    drop table not_full_data;

    create the table full_data

    (

    GRP varchar2 (10)

    )

    ;

    insert into full_data

    (

    Select '100' across double Union

    Select '200' of any double union

    Select '300' of the double

    );

    create the table not_full_data

    (

    GRP varchar2 (10),

    cvg_code varchar2 (10),

    line_type varchar2 (1)

    );

    insert into not_full_data

    (

    Select '100', '0', 'L' from dual

    Union of all the

    Select '200', '20130801', 'L' from dual

    );

    Select * from not_full_data has.

    full_data b

    where = b.grp a.grp (+)

    and line_type (+) = 'L '.

    and (cvg_code (+) = '0'

    or cvg_code > = '20120101')

    ;

    I'm putting the outer join to get all rows in full_data but when I try to put the outer join, then oracle does not allow me to put it and gives me below error:

    Error

    ORA-01719: outer join operator not allowed in operand of GOLD or IN

    01719 00000 - "outer join operator not allowed in GOLD or IN the operand.

    * Cause: Outer join appears in a clause or.

    * Action: If A and B are predicates, to achieve the effect of (has or B).

    Try (where select them (a and not B)) Union all the (where select them (B)).

    Error on line: column 33: 17

    I do not want to use full join and need this using the outer join. Thanks in advance

    Concerning

    Shu

    This is the required query

    SELECT *.

    Not_full_data a, full_data b

    WHERE a.grp (+) = b.grp

    AND line_type (+) = 'L '.

    AND (cvg_code = '0' OR cvg_code > = '20120101' OR cvg_code is NULL)

  • Problem with the implementation of Outer JOIN

    Hello Guru,

    Here's my scenario. I know that this can be achieved in several ways. But I need this in a single in aid Of JOINS EXTERNALrequest.

    I have two tables namely masters and transactions table. I need to join two columns (trx_name, trx_type) of the two tables and the need for all transactions. Part the trickiest is off 2 join columns, one column can be NULL in the main table.

    Script TABLES:

    create master table (mstr_no number, trx_name varchar2 (100), trx_type varchar2 (100), trx_module varchar2 (100));

    insert into masters values (1, 'yyyy', 'simple', 'cont');
    insert into masters values (2, 'bbbb', < NULL >, "cust");
    insert into masters values (3, 'yyyy', 'triple', "cont1");

    create table transaction (trx_no number, trx_name varchar2 (100), trx_type varchar2 (100));

    Insert in transaction values (1, 'yyyy', 'simple');
    Insert the transaction values (2, 'bbbb', 'double');
    Insert in transaction values (3, 'yyyy', 'triple');
    Insert in transaction values (4, 'cccc', 'purple');
    commit;

    I need output like below.

    1, 'yyyy', 'simple', 'cont '.
    2, 'bbbb', < NULL >, * "cust."
    3, 'yyyy', 'triple', "cont1".
    4, 'cccc', 'purple', < NULL >

    I need to join trx_name & trx_type in the two tables. Even if one of the column is null in the main table (mstr_no = 2), I have need of the corresponding value of trx_module since trx_name made match.


    My query:
    Select a.*, b.trx_module of transaction a, master b
    where a.trx_name = b.trx_name (+)
    and a.trx_type = NVL (b.trx_type (+), 'NULL')
    order of a.trx_no

    Appreciate your help.


    Concerning
    MN

    Maybe I'm wrong, but I don't think you can do this with a single outer join:

    with
    full_matches as (
    select *
      from master
     where trx_type is not null)
    ,
    partial_matches as (
    select *
      from master
     where trx_type is null)
    select a.*
         , coalesce(b.trx_module, c.trx_module) trx_module
      from transaction a
      left outer join full_matches b
        on (a.trx_name = b.trx_name and a.trx_type = b.trx_type)
      left outer join partial_matches c
        on (a.trx_name = c.trx_name)
     ;
    
    TRX_NO TRX_NAME             TRX_TYPE             TRX_MODULE
    ------ -------------------- -------------------- ------------
         1 aaaa                 single               cont
         3 aaaa                 triple               cont1
         2 bbbb                 double               cust
         4 cccc                 purple
    

    Re-reading my answer, I see that a short explanation might be useful: the query uses two outer joins: first masters lines with the name and type are joined, and then type the lines with missing. Him coalesce work to choose the most relevant information of module.

    Published by: Martin Preiss on June 7, 2013 20:24

  • Right outer join

    There are four tables:

    Family
    Parent
    Child
    Grandchild

    Ideally, they have all documents, such as

    F1 - P1 - C1 - G1
    F2 - P2 - C2 - G2
    F3 - P3 - C3 - G3

    But sometimes,.

    F1 - P1 - C1 - null
    F2 - P2 - null - null
    F3 - P3 - null - null

    For the case of the latter, maybe I need to right outer join. If it's between two tables, the right outer join is easier. But among the four tables, inner family join parent, child of the outer join, then the big kid outer join. Maybe even this has been done? If an outer join in this case is not relevant, what other options are available?


    Thank you

    (ORACLE 11.2)

    Hello

    As Salomon, said

    FROM  p  LEFT  OUTER JOIN c
    

    means exactly the same thing that

    FROM  c  RIGHT OUTER JOIN p
    

    Everything you do with LEFT OUTER JOIN you could also do with RIGHT OUTER JOIN, and vice versa. If either one did not exist, you may do whatever you want with the other. In practice, it's just what's happening: most of the people always use LEFT OUTER JOIN and never use a RIGHT OUTER JOIN.

    You can have a series of outer joins cascading. If I understand your problem, a particular family may or may not have parents that belongs to him. If there are relatives, then you want to show the family with his parents to realteaed, but if there are no parents, so you want to show the family anyway. Similarly, you want to show parents whether or not they have children, and the children or not all my grandchildren are related to them. In general, which is written like this:

    ...
    FROM           family          f
    LEFT OUTER JOIN      parent          p    ON  p.family_id  = f.family_id
    LEFT OUTER JOIN      child          c    ON  c.parent_id  = p.parent_id
    LEFT OUTER JOIN      grandchild  g       ON  g.child_id   = c.child_id
    

    You can have a situation where (for example) a child is related to a family, but the child has no parent? In this case, you can still use LEFT OUTER JOIN, but join conditions would be different.

  • FULLT OUTER JOIN on two different selects

    Hello

    I am facing a problem where I don't just get the handle to solve.

    I have two pieces of music with different return values. This value should be compared and joined. Simply put, I do an example where the return of the selection is represented as the table1 and table2
    Here is the example:
    table1
    abc_comp_nr, abc_cnt_emp
    12000, 15
    12500, 10
    13000, 30
    13500, 10
    
    table2
    xyz_comp_nr, xyz_cnt_emp
    12000, 15
    13000, 30
    14000, 20
    
    Output should be this:
    comp_nr, abc_cnt_emp, xyz_cnt_emp
    12000, 15, 15
    12500, 10, 0
    13000, 30, 30
    13500, 10, 0
    14000, 0, 20
    comp_nr is the combination of abc_comp_nr or xyz_comp_nr

    I tried this but did not work as expected:
    Select?, abc_cnt_emp, xyz_cnt_emp
    Of
    Table1 FULL OUTER JOIN table2
    ON abc_comp_nr = xyz_comp_nr

    Hope that someone was in trouble similar and found a good way to work it.

    Thanks in advance

    Tobias

    Hi, Tobias,.

    Tobias Arnhold wrote:
    Hello

    I am facing a problem where I don't just get the handle to solve.

    I have two pieces of music with different return values. This value should be compared and joined. Simply put, I do an example where the return of the selection is represented as the table1 and table2
    Here is the example:

    table1
    abc_comp_nr, abc_cnt_emp
    12000, 15
    12500, 10
    13000, 30
    13500, 10
    
    table2
    xyz_comp_nr, xyz_cnt_emp
    12000, 15
    13000, 30
    14000, 20
    

    Whenever you have a problem, post CREATE TABLE and INSERT statements for the sample data.
    See the FAQ forum {message identifier: = 9360002}

    Output should be this:
    comp_nr, abc_cnt_emp, xyz_cnt_emp
    12000, 15, 15
    12500, 10, 0
    13000, 30, 30
    13500, 10, 0
    14000, 0, 20
    

    comp_nr is the combination of abc_comp_nr or xyz_comp_nr

    I tried this but did not work as expected:
    Select?, abc_cnt_emp, xyz_cnt_emp
    Of
    Table1 FULL OUTER JOIN table2
    ON abc_comp_nr = xyz_comp_nr

    Instead of??? you want to

    NVL (abc_comp_nr, xyz_comp_nr)
    

    The first column is supposed to be the common identifier, abc_comp_nr, or xyz_comp_nr. It doesn't matter which, since the join condition

    ON abc_comp_nr = xyz_comp_nr
    

    said they will be the same, except that it's a FULL OUTER JOIN, if one of them might be null. If you want to display the non NULL when one of them is NULL and or the other (any) when they are both present. It's just that NVL.

    You can use NVL on other columns, too, to display 0 instead of NULL when there is no match:

    SELECT   NVL ( abc_comp_nr, xyz_comp_nr)     AS comp_nr
    ,        NVL ( abc_cnt_emp, 0)               AS abc_cnt_emp
    ,      NVL ( xyz_cnt_emp, 0)               AS xyz_cnt_emp
    FROM              table1
    FULL OUTER JOIN  table2  ON  abc_comp_nr  = xyz_comp_nr
    ;
    

    However, this will display 0 instead of NULL for abc_cnt_emp and xyz_cnt_emp when these columns are NULL for a reason, not just at the time when they do not reach the join condition. If the original paintings contain NULL values and you should keep NULL values in the result set, but you want NULLs which were created by the outer join to show as 0, then you may want something like this:

    SELECT   NVL ( abc_comp_nr, xyz_comp_nr)     AS comp_nr
    ,        NVL2 ( abc_comp_nr, abc_cnt_emp, 0)     AS abc_cnt_emp
    ,      NVL2 ( xyz_comp_nr, xyz_cnt_emp, 0)     AS xyz_cnt_emp
    FROM              table1
    FULL OUTER JOIN  table2  ON  abc_comp_nr  = xyz_comp_nr
    ;
    

    Whenever you use FULL OUTER JOIN, there is an excellent chance that you will want to use NVL (or his brother younger, stronger, COALESCE, or their cousin NVL2) as well.

    Published by: Frank Kulash on 3 March 2013 14:49

  • Outer Join and joining several Tables

    Hello

    Oracle Database 10 g Express Edition Release 10.2.0.1.0 - product

    I have three tables AddProject, AssociateProjectLead, AddAssociate. Now I'm generating a report who will join AddProject and AssociateProjectLead for a list of all the projects, even if it doenst have a project coordinator. I used the outer join for this. However, if I want the name of the project leader, I need to search for AddAssociate table. By joining this table also, the outer join is no longer valid. Please see the result below

    CREATE TABLE  "ADDPROJECT" 
       (     "VERSIONNO" NUMBER(*,0), 
         "PROJID" VARCHAR2(20), 
         "PROJNAME" VARCHAR2(60), 
         "PROJSTARTDATE" DATE, 
         "PROJSTATUS" VARCHAR2(20), 
         "PROJENDDATE" DATE, 
         "PROJENDTYPE" VARCHAR2(20), 
         "PROJENDREASON" VARCHAR2(1000), 
         "UCPROJECTMANAGER" VARCHAR2(20), 
         "FROMDATE" DATE, 
         "TODATE" DATE, 
         "SRCHFIELD" VARCHAR2(20), 
         "OPERATOR" VARCHAR2(20), 
         "PARENTPROJID" VARCHAR2(20), 
         "PROJHIDDENDATE" VARCHAR2(20), 
          CONSTRAINT "PK_B36" PRIMARY KEY ("PROJID", "PROJHIDDENDATE") ENABLE
       )
    
    
    CREATE TABLE  "ADDASSOCIATE" 
       (     "VERSIONNO" NUMBER(*,0), 
         "ASSOCIATEID" NUMBER(9,0) NOT NULL ENABLE, 
         "ASSOCIATENAME" VARCHAR2(100) NOT NULL ENABLE, 
         "CTOJOINDATE" DATE, 
         "STATUS" VARCHAR2(20), 
         "ENDDATE" DATE, 
         "SRCHFIELD" VARCHAR2(20), 
         "OPERATOR" VARCHAR2(20), 
         "FROMDATE" DATE, 
         "TODATE" DATE, 
          CONSTRAINT "PK_B23" PRIMARY KEY ("ASSOCIATEID") ENABLE
       )
    
    CREATE TABLE  "ASSOCIATEPROJECTLEAD" 
       (     "VERSIONNO" NUMBER(*,0), 
         "PROJLEADASSOID" NUMBER(9,0), 
         "PROJID" VARCHAR2(20), 
         "ASSOCIATEID" NUMBER(9,0), 
         "PROJLEADSTARTDATE" DATE, 
         "STATUS" VARCHAR2(20), 
         "ASSOCPROJHIDDENDATE" VARCHAR2(20), 
         "PROJHIDDENDATE" VARCHAR2(20), 
         "ENDDATE" DATE, 
          CONSTRAINT "PK_B40" PRIMARY KEY ("ASSOCIATEID", "PROJID", "ASSOCPROJHIDDENDATE") ENABLE
       )
    
    
    elect ap.projid,apl.associateid
    from addproject ap, associateprojectlead apl
    where ap.projid = apl.projid(+)
    and ap.projhiddendate = apl.projhiddendate(+)
    
    
    PROJID ASSOCIATEID 
    Proj08 75825 
    Proj09 75825 
    Proj10 75825 
    Proj11 75825 
    Proj12 259811 
    Proj01 103035 
    Proj02 103035 
    Proj03 320092 
    Proj04 320092 
    Proj05 120974 
    Proj06 367393 
    Proj07 117618 
    Proj07 224882 
    Proj07 246652 
    prj001 -  
    prj001 -  
    
    16 rows returned in 0.00 seconds
    
    
    select ap.projid,apl.associateid,aa.associatename
    from addproject ap, associateprojectlead apl,addassociate aa
    where ap.projid = apl.projid(+)
    and ap.projhiddendate = apl.projhiddendate(+)
    and apl.associateid = aa.associateid
    
    
    PROJID ASSOCIATEID ASSOCIATENAME 
    Proj11 75825 Amarendra Kumar Singh 
    Proj10 75825 Amarendra Kumar Singh 
    Proj09 75825 Amarendra Kumar Singh 
    Proj08 75825 Amarendra Kumar Singh 
    Proj02 103035 Rajesh Jayaprakash 
    Proj01 103035 Rajesh Jayaprakash 
    Proj07 117618 Chetan Malhotra 
    Proj05 120974 Perumal Rajaram 
    Proj07 224882 Dilshad Ahmad 
    Proj07 246652 Shankar Kausley 
    Proj12 259811 Arunchandar Arun Vasan 
    Proj04 320092 Venkatesh Sarangan 
    Proj03 320092 Venkatesh Sarangan 
    Proj06 367393 Venkata Ramakrishna P 
    
    14 rows returned in 0.00 seconds
    How can I select all the values in table AddProject?

    Published by: Pramukh on August 23, 2012 12:18

    Hello

    I could get the result with a bit of modification

    select ap.projid,
           apl.associateid,
           aa.associatename
      from addproject ap
           left outer join
           associateprojectlead apl
        on ap.projid = apl.projid
       and ap.projhiddendate = apl.projhiddendate
           left outer join
           addassociate aa
        on apl.associateid = aa.associateid
    

    As a follow-up, I have a request more. In the report form, the user can select a particular project ID and the report should be generated as a result. For example;-he wants to see the results of the only "Proj08". I get the output as below, while the result should display only the details of 'Proj08 '.

    select ap.projid,
           apl.associateid,
           aa.associatename
      from addproject ap
           left outer join
           associateprojectlead apl
        on ap.projid = apl.projid
       and ap.projhiddendate = apl.projhiddendate
       and ap.projID = 'Proj08'
           left outer join
           addassociate aa
        on apl.associateid = aa.associateid
    ORDER BY ap.projID
    
    PROJID ASSOCIATEID ASSOCIATENAME
    Proj01 -  -
    Proj02 -  -
    Proj03 -  -
    Proj04 -  -
    Proj05 -  -
    Proj06 -  -
    Proj07 -  -
    Proj08 75825 Amarendra Kumar Singh
    Proj09 -  -
    Proj10 -  -
    Proj11 -  -
    Proj12 -  -
    prj001 -  -
    prj001 -  -  
    
  • Full outer join

    30%

    Hello

    I have a few questions to ask. Please see below I have provided a script to recreate my problem.

    Question 1.

    I have the following query does not work when I include columns (see 1.2) in the select but will run when I use the Asterix symbol (see 1.1)

    * 1.1 runs with no problems *.
    select *
      from ora full outer join txt on ora.ora_id_y = txt.txt_id_y;
    * 1.2 returns error.*
    select txt.txt_id_y
         , txt.txt_n
         , txt.txt_y
         , ora.ora_n
         , ora.ora_y
      from ora full outer join txt on ora.ora_id_y = txt.txt_id_y;
    
    Error report:
    SQL Error: ORA-00918: column ambiguously defined
    00918. 00000 -  "column ambiguously defined"
    *Cause:    
    *Action:
    Question 2.

    Is it possible to use a query with joins free and using multiple outer joins to accomplish what I have under which is seen 6 to access the query I have to Question 1.

    CREATE THE SCRIPT
    drop table master;
    
    create table master
    ( id varchar2 (10 char)
    , txt varchar2 (1 char)
    , ora varchar2 (1 char)
    );
    
    INSERT INTO MASTER (ID, TXT, ORA) VALUES ('orange' , 'Y', 'Y');
    INSERT INTO MASTER (ID, TXT, ORA) VALUES ('apple', 'Y', '');
    INSERT INTO MASTER (ID, TXT, ORA) VALUES ('orange'  , 'Y', 'N');
    INSERT INTO MASTER (ID, TXT, ORA) VALUES ('peach'  , 'Y', '');
    
    create or replace force view ora_n
    as
    select id
         , count (ora) ORA_N
      from master
     where ora in ('N')
     group by id;
    
    create or replace force view ora_y
    as
     select id
         , count (ora) ORA_Y
      from master
     where ora in ('Y')
     group by id;
    
    create or replace force view txt_n
    as 
     select id
         , count (txt) TXT_N
      from master
     where txt in ('N')
     group by id;
    
    create or replace force view txt_y
    as 
     select id
           , count (txt) TXT_Y
      from master
     where txt in ('Y')
     group by id;
     
    create or replace force view ora
    as 
    select ora_n.id ora_id_n
         , ora_y.id ora_id_y
         , ora_n.ora_n
         , ora_y.ora_y
      from ora_n full outer join ora_y on ora_n.id = ora_y.id;
    
    create or replace force view txt
    as 
    select txt_y.id txt_id_n
         , txt_y.id txt_id_y
         , txt_n.txt_n
         , txt_y.txt_y
      from txt_n full outer join txt_y on txt_n.id = txt_y.id; 
    Published by: benton on August 21, 2012 10:48

    Published by: benton on August 21, 2012 11:11

    Found: support for Oracle, there are:

    Bug 6319169 : ORA-918, FULL OUTER JOIN
    Reproduced on 10.2.0.1,10.2.0.3.
    Fixed to the product Version 11.0
    WORKAROUND solution: alter session set '_column_elimination_off' = true;

Maybe you are looking for

  • Transferring content via FireWire

    Shortly, I will receive a Macbook Pro. I will be to transfer the contents of my iMac via FireWire to the Migration Wizard help. Put online to get a cable, and that's when I came across a problem. They had all sorts of configuration such as 4-pin to 6

  • Problem with Hootsuite

    Hello For some reason, after updated to 42 FF, images of pbs.twing.com (profile images, user transferred images, etc.) will not display. In FF 41.0.2, no problem. Videos and other data to display very well, but these are not pbs.twing.com. Thank you!

  • Pencil of Apple has stopped working after a few days

    OK, Apple (a wonderful device) pencil worked very well until I turned on the airplane on the iPad Pro mode. After turning off airplane mode pencil Apple has not re-couple to the iPad Pro. Thinking that the battery needs to be recharged, I attach to t

  • A comparison to run using a structure case

    Hello I'm writing a simple program, but I can't seem to understand how to write it. I have a dynamic series of data (about 16 000 values) running inside a while loop. I want to add 180 a value if that value is less than 30. My idea was to: 1 make a c

  • Disk not appearing file is not in the list of the 'Source files' Installer

    I have a file (extension: .rtf) that I need to include in my application setup.  I checked triple (triple at the very least) the location of the file on the physical disk.  Looking at the project "Build." I had to bypass project .xml problems before,