left join on 1 table

Hello

I was wondering table just if possible to join the 1. The reason why Im asking that her because in my table, I have an activity_id and a parent_activity_id. I want to show the parent and the child in different columns. See below:

create table activity (
  activity_id number,
  parent_activity_id number
);



insert into activity values (12500, null);
insert into activity values (12501, null);
insert into activity values (12502, null);


insert into activity values (12503, 12500);
insert into activity values (12504, 12501);
insert into activity values (12505, 12502);

insert into activity values (12506, 12500);
insert into activity values (12507, 12501);
insert into activity values (12508, 12502);

If the result will be:

Parent Child
1250012503
1250012506
1250112504
1250112507
1250212505
1250212508

Any help is appreciated. Thank you...

Kind regards

Ed

Thanks for posting of sample data. You need hierarchical query.

SQL> select connect_by_root(activity_id) parent_activity_id, activity_id
  2    from activity
  3   where connect_by_isleaf = 1
  4   start with parent_activity_id is null
  5  connect by parent_activity_id = prior activity_id;

PARENT_ACTIVITY_ID ACTIVITY_ID
------------------ -----------
             12500       12503
             12500       12506
             12501       12504
             12501       12507
             12502       12505
             12502       12508

6 rows selected.

Tags: Database

Similar Questions

  • Left join between two tables using two different conditions

    I have following three tables with their data, as shown below.

    CREATE TABLE TIREMASTERPROCESS_TEMP
    (
    PRODUCTIONCODE TANK (12 BYTES),
    FIELDNAME CHAR (12 BYTES),
    DATACHR VARCHAR2 (60 BYTE),
    REVISIONNO TANK (3 BYTES),
    DATANUM NUMBER (9.4)
    )
    Whether the table c. and its sample data are like

    FIELDNAME DATACHR REVISIONNO DATANUM PRODUCTIONCODE
    AB No. Nch 1 100 0
    AB No. Nch 1 108 0
    AB No.-of-Nch 1 1 0
    Ass42 teased dishes 1 0
    Ass42 BTDrumNo1 BTD-051 1 0
    AB53 BTDrumNo1 BTD-051 104 0


    CREATE TABLE materialcode
    (
    UPPERMATERIALCODE CHAR (20),
    PROCESSNO TANK (3),
    PROCESSADOPTDATE TANK (9)

    )
    Whether the table b. and its sample data are like

    UPPERMATERIALCODE PROCESSNO PROCESSADOPTDATE
    Ass42 1 20120717
    AB53 108 20121121
    111 20111104 AS05
    104 20120928 AS30


    CREATE TABLE BUILDINGSCHEDULEMASTER
    (
    BUILDINGSIZE TANK (5 BYTES),
    GTCODE FLOAT (4 BYTES),
    TIREPERCART NUMBER (3.0).
    BUILDINGLOT NUMBER (3.0)
    )
    Whether table and its sample data are like

    BUILDINGSIZE GTCODE TIREPERCART BUILDINGLOT
    AB42A 4 12 ass42
    AB53A 4 88 AB53
    AS30A AS30 4 80
    BF03A 1 90 BF03


    Now, I need to get some data in these fields by using the suite of mappings.

    « PR_ » || Trim (a.BUILDINGSIZE) | ' / MPL2' Processid,--PRIMARY KEY
    TO_DATE (substr (NVL(b.PROCESSADOPTDATE,'19800101'), 7, 2) |) » /'|| SUBSTR (NVL(b.PROCESSADOPTDATE,'19800101'), 5, 2) | » /'|| SUBSTR (NVL(b.PROCESSADOPTDATE,'19800101'), 1, 4). (' 01:00:00 ',' dd-mm-yyyy hh24:mi:ss') starteff, to_date (SUBSTR (NVL(b.PROCESSADOPTDATE,'19800101'), 7, 2) |) » /'|| SUBSTR (NVL(b.PROCESSADOPTDATE,'19800101'), 5, 2) | » /'|| SUBSTR (NVL(b.PROCESSADOPTDATE,'19800101'), 1, 4). (' 01:00:00 ',' dd-mm-yyyy hh24:mi:ss') startDate.
    b.PROCESSNO revisioncodeid,
    a.BUILDINGLOT tirepercart ,
    CASE WHEN c.FIELDNAME = 'BTDrumNo1' then c.DATACHR end drumtype1.
    BOX WHEN (trim (C.DATACHR) = '1' and trim (C.FIELDNAME) = "No. Nch") and THEN click 'YES '.
    ANOTHER 'NO '.
    END may-BUG,
    case
    When c.FIELDNAME = 'Wavy'
    AND c.DATACHR = 'Use' THEN on 'YES '.
    When c.FIELDNAME = 'Wavy'
    AND c.DATACHR <>'Use' THEN 'NO '.
    fine wavy


    Now for the tables A and B I have the simple join as condition

    a.GTCODE = b.UPPERMATERIALCODE

    But I have to use two different left join conditions to join the table B and C to calculate the RESP fields according to the condition.
    Now, I have to use

    (trim (b.UPPERMATERIALCODE)). » -'|| Trim (b.PROCESSNO) = Trim (c.PRODUCTIONCODE) | » -'|| Trim (c.REVISIONNO)

    condition to get the data for the WAVY and DRUMTYPE1 fields.

    But at the same time, I have to use

    substr (Trim (b.UPPERMATERIALCODE), 1, 2). » -'|| Trim (b.PROCESSNO) = Trim (c.PRODUCTIONCODE) | » -'|| Trim (c.REVISIONNO)

    conition to derive the CHAFER field.

    And for this reason I am come so many duplicates and do not correct results for JUNEBUG, WAVY, DRUMTYPE1, and STARTDATE field.

    I need some advice as how can I do so that I get the correct results without duplicates for the PRIMARY KEY.

    Thank you

    Mahesh

    It would have been easier to answer if you gave us your example query that gives incorrect results - which both show us what you are doing and give us a starting point.
    Insert instructions for data, rather than only the data would have helped too, making it more quick to test this point.
    You do not show what you have done with your two outer join criteria, but I think you need to list TIREMASTERPROCESS_TEMP in your query twice, with alias names. Here's what I did:

    select a.BUILDINGSIZE, a.GTCODE, b.PROCESSNO ,  c1.FIELDNAME, c1.DATACHR, C2.FIELDNAME, C2.DATACHR
    , CASE WHEN c1.FIELDNAME='BTDrumNo1' then c1.DATACHR end drumtype1
    , CASE WHEN (trim(c2.DATACHR) = '1' and trim(c2.FIELDNAME) = 'No-of-Nch') THEN 'YES' ELSE 'NO' END CHAFER
    , case when c1.FIELDNAME='Wavy' AND c1.DATACHR='Use' THEN 'YES'
           when c1.FIELDNAME='Wavy' then 'NO' else null end wavy
    from BUILDINGSCHEDULEMASTER        A
    join materialcode b on a.GTCODE=b.UPPERMATERIALCODE
    left outer join TIREMASTERPROCESS_TEMP c1
       ON trim(b.UPPERMATERIALCODE)||'-'||trim(b.PROCESSNO) = trim(c1.PRODUCTIONCODE)||'-'||trim(c1.REVISIONNO)
    left outer join TIREMASTERPROCESS_TEMP c2
       ON substr(trim(b.UPPERMATERIALCODE),1,2)||'-'||trim(b.PROCESSNO) = trim(c2.PRODUCTIONCODE)||'-'||trim(c2.REVISIONNO)
    

    C1 is an alias for the TIREMASTERPROCESS_TEMP line which is necessary for drumtype1 and wavy, c2 is an alias for the TIREMASTERPROCESS_TEMP line required for JuneBug. There was some minor errors in your calculations of field I tried to correct.

    The results are:

    BUILD GTCO PRO FIELDNAME    DATACHR    FIELDNAME    DATACHR    DRUMTYPE1  CHA WAV
    ----- ---- --- ------------ ---------- ------------ ---------- ---------- --- ---
    AB53A AB53 108                         No-of-Nch    1                     YES
    AB42A AB42 1   BTDrumNo1    BTD-051    No-of-Nch    1          BTD-051    YES
    AB42A AB42 1   Wavy         NotUse     No-of-Nch    1                     YES NO
    AS30A AS30 104                                                            NO
    

    Hope this helps,
    David

  • Left join on 3 tables

    I have 3 tables to know

    CUREPRESSMASTER,
    CUREBLDGMACHINECONDITION,
    NAMINGMASTER

    with the structure of each table as
    CUREPRESSMASTER: -.
    CUREPRESS CHAR (5)
    PRESSTYPE TANK (8)
    CURINGGROUP CHAR (2)

    examples of data
    "CUREPRESS" "PRESSTYPE'"CURINGGROUP ".
    'M02' "HAM OF 63.5" "31".
    "M03" "HAM OF 63.5" "31".
    "M04" "HAM OF 63.5" "31".
    "M05" "HAM OF 63.5" "31".
    "M06" "63.5" "31".
    "M07" "HAM OF 63.5" "31".
    "S03" "63.5" "31".
    "S04" "HAM OF 63.5" "31".
    "S05" "HAM OF 63.5" "31".

    CUREBLDGMACHINECONDITION: -.
    GROUPID (2) TANK
    MACHINENAME CHAR (5)
    DATA01 CHAR(10)
    DATA02 CHAR(10)
    Samples: -.

    'GROUPID' "MACHINENAME" "DATA01" "DATA02.
    '30' 'M03' "63.5" "UNDER".
    '30' 'M04""63.5""UNDER ".
    '30' 'M05""63.5""UNDER ".
    '30' 'M06""63.5""UNDER ".
    '30' 'M07""63.5""UNDER ".
    "30" "M08" "63.5" "UNDER".

    NAMINGMASTER: -.
    IETS1 CHAR (1)
    CLASSEMENT2 CHAR (2)
    CERTIFICATE3 TANK (2)
    NAMING2 CHAR (10)

    Samples: -.
    "IETS1" "CLASSEMENT2" "CERTIFICATE3'"NAMING2 ".
    "0' '52" "31" "281".
    '0' '69' "31" "110".
    '2' '30' "31" "TBR".
    "3' '30'"31""TIRE PLANT. "
    "0' '51" "31" "261".
    "A" "30" "31" "RP".
    "A" "31" "31" "RP".
    "H'" ""31""MTRLBhind. "
    "J"     "01"     "31"     ""
    "L"     "01"     "31"     ""
    "G"     " "     "31"     ""
    "8" "" "31" "CambioMedi."

    Now, I want to have all the rows of the table CUREPRESS left join with two other tables as specified below.
    CUREPRESSMASTER. CUREPRESS = CUREBLDGMACHINECONDITION. MACHINENAME
    CUREPRESSMASTER. CURINGGROUP = NAMINGMASTER. CERTIFICATE3.

    Now I want to select the following columns as CUREPRESS, PRESSTYPE, NAMING2, DATA01 DATA02 after leaving the joints as shown above and curepress as primary key.

    When I tried using a General left join she gave much more duplicate rows.
    I have 100 lines in curepress, then I would have only 100 lines in the final result but I get my as 233 lines output, this may be due to CUREPRESSMASTER. CURINGGROUP = NAMINGMASTER. Certificate3 this condition.

    Please suggest me some queries.

    This may be due to CUREPRESSMASTER. CURINGGROUP = NAMINGMASTER. Certificate3 this condition.

    Yes. Because the above join result in one-to-MANY relationship. Look at your data

    CUREPRESS PRESSTYPE CURINGGROUP
    --------- --------- -----------
    M02       63.5 HAM  31
    M03       63.5 HAM  31
    M04       63.5 HAM  31
    M05       63.5 HAM  31
    M06       63.5      31
    M07       63.5 HAM  31
    S03       63.5      31
    S04       63.5 HAM  31
    S05       63.5 HAM  31          
    
     9 rows selected 
    
    CLASSIFICATION1 CLASSIFICATION2 CLASSIFICATION3 NAMING2
    --------------- --------------- --------------- ----------
    0               52              31              281
    0               69              31              110
    2               30              31              TBR
    3               30              31              TIRE PLANT
    0               51              31              261
    A               30              31              PSR
    A               31              31              PSR
    H                               31              MTRLBhind
    J               01              31
    L               01              31
    G                               31
    8                               31              CambioMedi 
    
     12 rows selected 
    

    The value is 31 for all rows in the table two. And so 9 * 12 output will be 108 lines. Its one expected result how you expect to only 9 lines?

    You can show us your results as well. I guess you are missing some basic business requirements. Show us your results.

  • Left join with three-table join query

    I am trying to create a query that left me speechless. Most of the query is simple enough, but I have a problem I do not know how to solve.

    Background:
    We have stock stored in i_action.

    We have the attributes available for each type of action. The attributes available for each action are described in shared_action_attribute. Each type of action can have three attributes or none at all.

    We have the values stored for the attributes in i_attribute_value.

    An example says:
    We have a transfer action (action_code B4). The action of B4 entry into i_action records the fact that the transfer took place and the date at which he spoke. The attributes available for a transfer action are the function code receiver, the receiving unit number and the reason of transfer code. These types of attributes available and their order are stored in shared_action_attribute. The actual values of the attributes for a specific action of transfer are stored in i_attribute_value.

    Now i_action and i_attribute_value can be connected directly in action_seq in i_action and ia_action_seq in i_attribute_value. A left join on these two tables provides results for all actions (including actions that have no attributes) and assign values (see Query 1 below).

    There are two questions. First of all, I want only the first two attributes. To specify the attributes of the first two, I also i_attribute_value a link to shared_action_attribute (which is where the order is stored). I can build a simple query (without the left join) which connects the three tables, but then shares without attributes would be excluded from my result (see Query 2 below).

    The second problem is that I'd actually a row returned for each action with first_attribute and second_attribute in the form of columns instead of two lines.

    The final query will be used to create a materialized view.

    Here are the tables and examples of what is stored in the:

    TABLE i_action
    Name Type
    ----
    ACTION_SEQ NUMBER (10)
    DATE OF ACTION_DATE
    ACTION_CODE VARCHAR2 (3)
    VARCHAR2 (1) DELETED

    EXAMPLE OF LINES
    ACTION_SEQ ACTION_DATE DELETED ACTION_CODE
    ----
    45765668 9 OCTOBER 09 B2 HAS
    45765670 9 OCTOBER 09 BA HAS
    45765672 B6 9 OCTOBER 09A
    45765673 9 OCTOBER 09 B4 HAS
    45765674 9 OCTOBER 09 G1 HAS
    45765675 9 OCTOBER 09 M3 HAS

    TABLE i_attribute_value
    Name Type
    ---
    IA_ACTION_SEQ NUMBER (10)
    SACTATT_SACT_CODE VARCHAR2 (3)
    SACTATT_SAT_TYPE VARCHAR2 (3)
    VARCHAR2 VALUE (50)

    EXAMPLE OF LINES
    IA_ACTION_SEQ SACTATT_SACT_CODE SACTATT_SAT_TYPE VALUE
    ----
    45765668 B2 COA 37 B
    45765670 BA ROA D
    45765670 BA ROR P
    45765672 B6 CAT C
    B4 45765673 RFC E
    45765673 B4 TRC P
    B4 45765673 RUN 7
    45765674 G1 SS 23567
    G1 45765674 ASG W

    TABLE shared_action_attribute
    Name Type
    ---
    SACT_CODE VARCHAR2 (3)
    SAT_TYPE VARCHAR2 (3)
    ORDER NUMBER (2)
    TITLE VARCHAR2 (60)

    EXAMPLE OF LINES
    SACT_CODE SAT_TYPE UNDER THE ORDER
    ----
    B2 ACO 1 Office code
    BA ROR 1 reason to re-open
    Authority of BA ROA 2 reopen
    B6 CAT 1 category
    B4 RFC 1 reception function code
    B4 RUN 2 receives the unit code
    B4 TRC 3 transfer of reason code
    Sequence of G1 SS 1 personal
    Reason for G1 ASG 2 assignment

    QUERY 1:
    It's my current query as well as its results. Most are select simple but only one column is filled using the function analytic last_value (thank you guys). The last column in the view sub stores the value of the attribute. What I want is to replace this single column with two columns named first_attribute and second_attribute and eliminate all other attributes.
    SELECT ia.action_seq, ia.action_date, ia.action_code cod,
    NVL
    (LAST_VALUE (CASE
    WHEN ia.action_code = "G1".
    AND iav.sactatt_sat_type = 'SS '.
    THEN THE VALUE
    WHEN ia.action_code IN ('A0', 'A1')
    THEN '67089'
    END IGNORE NULLS
    ) OVER (PARTITION BY ia.ici_charge_inquiry_seq ORDER BY ia.action_date,
    IA.serial_number, ia.action_seq),
    '67089'
    ) staff_seq,.
    value
    From i_action LEFT JOIN i_attribute_value iav AI
    ON iav.ia_action_seq = ia.action_seq
    WHERE ia.deleted = 'A ';

    ACTION_SEQ ACTION_DA COD STAFF_SEQ VALUE
    ----
    45765668 9 OCTOBER 09 B2 67089 37 B
    45765670 9 OCTOBER 09 BA D 67089
    45765670 9 OCTOBER 09 BA 67089 P
    45765672 9 OCTOBER 09 B6 67089 C
    45765673 9 OCTOBER 09 B4 67089 E
    45765673 9 OCTOBER 09 B4 67089 P
    45765673 9 OCTOBER 09 67089 7 B4
    45765674 9 OCTOBER 09 23567 23567 G1
    45765674 9 OCTOBER 09 G1 23567 W
    45765675 9 OCTOBER 09 M3 23567

    QUERY 2:
    This query is limited to the first two attributes but he also filed actions which have no attributes, and it creates still several lines for each action instead of a single line with two columns for attributes.
    SELECT ia.action_seq, ia.action_date, ia.action_code cod,
    NVL
    (LAST_VALUE (CASE
    WHEN ia.action_code = "G1".
    AND iav.sactatt_sat_type = 'SS '.
    THEN THE VALUE
    WHEN ia.action_code IN ('A0', 'A1')
    THEN '67089'
    END IGNORE NULLS
    ) OVER (PARTITION BY ia.ici_charge_inquiry_seq ORDER BY ia.action_date,
    IA.serial_number, ia.action_seq),
    '67089'
    ) staff_seq,.
    value
    OF shared_action_attribute saa, ims_action AI, ims_attribute_value iav
    WHERE iav.ia_action_seq = ia.action_seq
    AND iav.sactatt_sact_code = saa.sact_code
    AND iav.sactatt_sat_type = saa.sat_type
    AND saa.display_order IN ('1 ', ' 2')
    AND ia.deleted = 'A ';

    ACTION_SEQ ACTION_DA VALUE OF COD
    ----
    45765668 9 OCTOBER 09 B2 67089 37 B
    45765670 9 OCTOBER 09 BA D 67089
    45765670 9 OCTOBER 09 BA 67089 P
    45765672 9 OCTOBER 09 B6 67089 C
    45765673 9 OCTOBER 09 B4 67089 E
    45765673 9 OCTOBER 09 67089 7 B4
    45765674 9 OCTOBER 09 23567 23567 G1
    45765674 9 OCTOBER 09 G1 23567 W

    I found it quite complex to try to write - I hope that I was clear.

    Thank you very much!

    Hello

    You can use an alias for column (such as staff_seq) in the ORDER BY. Unfortunately, it's the only place where you can use it in the same query, where it was defined.
    You can use it anywhere in the super-requetes, however, so you can still work around this problem in assigning the aliases in a subquery and GROUP BY (or other) in a Super query, like this:

    WITH   ungrouped_data      AS
    (
        SELECT ia.action_seq, ia.action_date, ia.action_code,
              NVL
                  (LAST_VALUE (CASE
                                  WHEN ia.action_code = 'G1'
                                   AND sactatt_sat_type = 'SS'
                                     THEN VALUE
                                  WHEN ia.action_code IN ('A0', 'A1')
                                     THEN '67089'
                               END IGNORE NULLS
                              ) OVER (PARTITION BY ia.ici_charge_inquiry_seq ORDER BY ia.action_date, ia.action_seq),
                   '67089'
                  )staff_seq,
               (CASE
                  WHEN display_order = '1'
                  THEN VALUE
               END) first_attribute,
               (CASE
                  WHEN display_order = '2'
                  THEN VALUE
               END) second_attribute
          FROM i_action ia
          LEFT JOIN i_attribute_value iav
               ON iav.ia_action_seq = ia.action_seq
          LEFT JOIN shared_action_attribute
               ON sactatt_sact_code = sact_code
             AND sactatt_sat_type = sat_type
         WHERE ia.deleted = 'A'
    )
    SELECT       action_seq
    ,       action_date
    ,       action_code
    ,       staff_seq
    ,       MIN (first_attribute)          AS first_attribute
    ,       MIN (second_attribute)     AS second_attribute
    FROM       ungrouped_data
    GROUP BY  action_seq
    ,       action_date
    ,       action_code
    ,       staff_seq
    ;
    

    There are other alternatives for special cases, but none of them work in this particular case.

  • Left join for three tables

    Hello

    I wrote the following example query,


    SELECT a.acc_rk
    A,.
    b,
    c
    WHERE a.acc_rk = b.acc_rk
    AND b.acc_rk = c.acc_rk;


    Now I need to change equi join left join
    I have the left join table 'a' with table "b".
    and again, I have to make tables of left join 'b' and 'c '.

    Can someone tell me how to do this.

    Thank you
    Radha K

    AJ99 wrote:

    SELECT a.acc_rk
    FROM (a LEFT JOIN b ON a.acc_rk = b.acc_rk)
    LEFT JOIN c ON b.acc_rk = c.acc_rk;
    

    There is no need for media. ;)

    SELECT a.acc_rk
      FROM a LEFT JOIN b ON a.acc_rk = b.acc_rk
           LEFT JOIN c ON b.acc_rk = c.acc_rk;
    
  • Left join to another database

    Hello
    I had a scenario where I need to write a query that gets SQL Server database records, but have a left join on Oracle table, I know we can achiev this link between Oracle and SQL DB, but my team of DB are unwilling to create links from DB, is there a way probably from data models We can write a query that can call Oracle table too?

    Here is an article from blog of tim on the subject:

    http://blogs.Oracle.com/XmlPublisher/2008/07/multiple_datasources_i.html

  • Why left outer join with a table gives me more lines?

    Hi gurus,

    I can see "view_a" and a table 'table_a '.

    view_a a county of 100 lines. Now, when I left outer join that discovers with a 'table_a', I expect all 100 lines.

    However, I'm more than 100 lines. Is it still possible?

    Also even to analyze these situations, how can I move forward?

    Because it is very high volumn of sight and takes longer to run.

    Select count (*) view_a, view_b

    where view_a.col1 = view_b.col1 (+)

    and view_a.col2 = view_b.col2 (+);

    Thank you

    I can see "view_a" and a table 'table_a '.

    view_a a county of 100 lines. Now, when I left outer join that discovers with a 'table_a', I expect all 100 lines.

    However, I'm more than 100 lines. Is it still possible?

    Also even to analyze these situations, how can I move forward?

    Because it is very high volumn of sight and takes longer to run.

    Select count (*) view_a, view_b

    where view_a.col1 = view_b.col1 (+)

    and view_a.col2 = view_b.col2 (+);

    Which is not necessarily related to the use of an outer join.

    Just join of two tables in general will give you more rows of one table has.

    Scott DEPT table contains ONE row for deptno = 10

    The EMP table has THREE rows of deptno = 10

    The number of rows you plan if you join two tables using an equi-join?

    Three - what is MORE lines the DEPT table has for deptno = 10

    Select * from Department where deptno = 10

    DEPTNO, DNAME, LOC
    10, ACCOUNTING, NEW YORK

    Select * from emp where deptno = 10

    MGR, EMPLOYMENT ENAME, EMPNO, HIREDATE, SAL, COMM, DEPTNO
    7782, CLARK, MANAGER, 7839, 6/9/1981,2450, 10
    7839, KING, PRESIDENT, 17 NOVEMBER 00, 10
    7934, MILLER, CLERK, 7782, 23 JANUARY 00: 10

    Select dept.*, emp.*
    Department, emp
    where dept.deptno = 10
    and dept.deptno = emp.deptno

    DEPTNO, DNAME, LOC, EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO_1
    10, ACCOUNTING, NEW YORK, 7782, CLARK, MANAGER, 7839, 6/9/1981,2450, 10
    10, ACCOUNTING, NEW YORK, 7839, KING, PRESIDENT, 17 NOVEMBER 00, 10
    10, ACCOUNTING, NEW YORK, 7934, MILLER, CLERK, 7782, 23 JANUARY 00: 10

    So if these are the lines ONLY in the table EMP and DEPT the query would give you THREE lines despite the DEPT table only ONE line.

    No do you expect? You get ALL the child rows that belong to the parent company. Otherwise, how could it possibly work?

    The OUTER join includes lines where the parent row exists but there is NO child line as others have shown.

    Outer joins

    Outer join extends the result of a simple join. Outer join returns all rows that satisfy the join condition and also returns some or all rows in a table for which no line of the other meet the join condition.

    Get more lines to exist in one of the paintings is a basic necessity. It usually has NOTHING to with the question of whether you have an outside to join or not.

    See the section on the JOINTS in the Oracle documentation

    http://docs.Oracle.com/CD/B28359_01/server.111/b28286/queries006.htm

  • Left join of the two tables and multiple values into a single value separated by commas

    Hello

    I have following tables with their structures and their data as below.

    CREATE TABLE 'BETODI '. "" BETINFO ".

    (

    VARCHAR2 (8 BYTE) "CURRENTPRESS."

    ENABLE 'TYPEIDCONTAINER' VARCHAR2 (30 BYTE) NOT NULL

    )

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ('A24G', 'PMC');

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ('A24D', 'Pensky-MARTENS');

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ("A25D", "CMP");

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ('A25G', 'PMC');

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ('A26D', 'PMC');

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ('A26G', 'PMC');

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ("A32G", "V-BFC3");

    INSERT INTO Betinfo (Currentpress, typeidcontainer) VALUES ('A32D', "V-BFC2");

    CREATE TABLE 'BETODI '. "" BETMASTER ".

    (

    ACTIVATE THE "CUREPRESS" TANK (5 BYTES) NOT NULL,

    ACTIVATE THE "TYPE" VARCHAR2 (5 BYTE) NOT NULL,

    NUMBER (5.0) "LASTPCIRIM".

    )

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ('A24', '45 M 8', 15);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ('A25', 42 16', 15);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ("A26", 16' 45, 15);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ("A27", '45 M 34', 16);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ('A28', '45 M 34', 16);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ('A29', '45 M 34', 16);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ('A30', '45MCH', 15);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ("A31", "45MCH", 16);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ('A32', '45MCH', 16);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ('A33', '45MCH', 16);

    INSERT INTO BetMaster (Curepress, type, lastpcirim) VALUES ("A34", "45MCH", 16);

    These two tables have left join as

    BETMASTER. CUREPRESS = substr (BETINFO. CURRENTPRESS, 1, 3)

    now I want to have the data in the two tables with fields Curepress, Lastpcirim, typeidcontainer.

    Also something like

    Make a group of typeidcontainer if this value is greater than 1 by press separated the values of semicolon (;)

    So, for example above, we should be given as

    A24 PMC 15; PENSKY-MARTENS

    A25 15 PMC

    A26 15 PMC

    A27 16 (NULL)

    A28 16 (NULL)

    A30 15 (NULL)

    A31 16 (NULL)

    A32 16 BFC2-V; V BFC3

    A33 16 (NULL)

    A34 16 (NULL)

    How could do?

    My current request is as

    Select distinct Curepress, lastpcirim, typeidcontainer

    BETMASTER STD left join INF BETINFO

    on the trim (STD. CUREPRESS) = substr (trim (INF. CURRENTPRESS), 1, 3)

    but I am unable to get the values separated by commas.

    Any help would be appreciated.

    Thank you

    Mahesh.

    Hi, Mahesh,

    If you want to only 1 row of output for each distinct combination of currentpress and lastpcirim?  This sounds like a job for GROUP BY.

    And you want the row to contain a list of all different typidcontainers-delimited?  This sounds like a job for the aggregate LISTAGG function.

    WITH joined_data AS

    (

    SELECT DISTINCT

    MST.curepress, mst.lastpcirim, inf.typeidcontainer

    OF betmaster STD

    LEFT JOIN betinfo ON TRIM (mst.curepress) inf = SUBSTR (TRIM (inf.currentpress)

    1

    3

    )

    )

    SELECT curepress, lastpcirim

    LISTAGG (typeidcontainer, ',')

    THE Group (ORDER BY typeidcontainer) AS container_list

    OF joined_data

    Curepress GROUP, lastpcirim

    ;

    Unfortunately, you can't say LISTAGG (DISTINCT ...), so you should always get the separate containers how you already are.  (Note that the subquery is just what you posted).

    Thanks for posting the CREATE TABLE and INSERT statements; It is very useful.  Don't forget to tell what version of Oracle you are using.  LISTAGG was new in Oracle 11.2.

    Why not add CHECK constraints (and perhaps triggers) to your tables, so that curepress and currentpress are not stored with the head or trailing spaces?  Then you wouldn't need to use the PAD in queries like this, and your code would be simpler and more effective.

  • The left join - no data in the table don't want to display the data from the table one

    Hello

    I'm writing a query. Here is my scenario, I have two tables EMP and EMP_TYPE. I want to join both the table and even if there is no matching record in the table for EMP EMP_TYPE, I want to return the record to the EMP table and empty values of EMP_TYPE.
    create table EMP
    (
      EMPID   NUMBER(10,2),
      EMPNAME VARCHAR2(100)
    );

    INSERT INTO emp (empid,empname) values (1, 'abc');
    INSERT INTO emp (empid,empname) values (2, 'xyz');
    INSERT INTO emp (empid,empname) values (3, 'UNJ');

    create table EMP_Type
    (
      ID          NUMBER(10,2),
      EMPID       NUMBER(10,2),
      TYPE_ID     NUMBER(10,2),
      END_DATE    DATE
    );

    INSERT INTO EMP_Type(id, empid, TYPE_ID, END_DATE) values (100, 2, 1, SYSDATE);

    select *
      from emp e
      left outer join emp_Type t
        on e.empid = t.empid
    and t.type_id = 1

    returns.

            EMPID     EMPNAME     ID             EMPID     TYPE_ID     END_DATE
         2.00             xyz            100.00     2.00             1.00             10/9/2012 5:18:59 PM
         3.00             UNJ                    
         1.00             abc                    


    select *
      from emp e
      left outer join emp_Type t
        on e.empid = t.empid
    and t.type_id = 1
    and t.empid = 3

    returns

            EMPID     EMPNAME     ID             EMPID     TYPE_ID     END_DATE
         2.00             xyz                 
         3.00             UNJ                    
         1.00             abc          

    but instead I want

            EMPID     EMPNAME     ID             EMPID     TYPE_ID     END_DATE
         3.00             UNJ                    

    Your conditions of conflict
    >
    and t.type_id = 1
    and t.empid = 3
    >
    There is a record with t.empid 3

    select *
      from empx e, empx_Type t
    where e.empid = 3
      and e.empid = t.empid (+)
    
    EMPID,EMPNAME,ID,EMPID_1,TYPE_ID,END_DATE
    3,UNJ,,,,
    
  • LEFT JOIN increases the number of lines

    Hi guys,.

    I had a problem, my left join retrieves multiple values. I know he has only 252 in there that correspond to the place where

    condition. If I use the table in a left join with the same condition where my row count increases.

    -1176 lines

    Select count (erg_ID) of

    MySchema. T_STA_ERG sta_erg

    INNER JOIN T_MEN hoechst

    ON sta_erg. PARAMETER = hoechst. PARAMETER

    AND sta_erg. JAHR = 2014

    where sta_erg. MESSERG_KNG = 'A' AND sta_erg. MESSERG_ALPHA IN ('03 ") and sta_erg. NORM_MESS is null

    -252 lines

    Select distinct erg_ID myschema. T_STA_ERG sta_erg where sta_erg. MESSERG_KNG = 'A' AND sta_erg. MESSERG_ALPHA IN ('03 ") and sta_erg. NORM_MESS is null

    any clue´s how I can build in conditions in my join which would not increase the results of the line?

    Why not just an inner join then?

  • Clarification on NULL or behavior LEFT JOIN behavior

    Good day ladies------Gentlemen\ gurus-Experts-and Al:

    Just when I thought I got my mind wrapped around the notion of NULL value, as defined by Oracle, I met what follows below.  Basically, what you are watching is how our employees of the human resources tables are set up (for the most part).  We have the employees, employee contracts table and the tables of positions.  When I want to make a list of active staff, I always use the filter end date, you will see below in the Super request, essentially looking for staff who do not have a contract AND a position end date entered in the DB.  It works like a charm.  However, today, I noticed an official on the list, who has never had a position is entered in the comic book, and he had an 'open' contract  In my example below, why would "Hal Jordan" appear on the active staff list?  Yes, he spends the first part of my predicate (contract_end is null), but it does not work (at least by my understanding) past the second part of the predicate which is position_end has the value NULL because there not even a record is entered in the comics!  Why would he appear?  Is it because of the LEFT JOIN or a NULL rule type, I'm not aware of?  Thanks for your help!

    Aqua

    EMPLOYEES AS

    (

    SELECT '10' AS emp_id, 'Banner' last_name, 'Robert' NAME FROM dual

    UNION ALL

    SELECT '20', 'Wayne', 'Bruce' OF THE double

    UNION ALL

    SELECT '30', 'Kent', 'Clark' FROM dual

    UNION ALL

    SELECT "40", "Parker", "Peter" OF THE double

    UNION ALL

    SELECT '50', 'Last', 'Tony' FROM dual

    UNION ALL

    SELECT '60', 'Jordan', 'Hal' OF THE double

    ),

    emp_contracts AS

    (

    SELECT '10' AS emp_id, to_date (January 1, 2011 ',' MON-DD-YYYY "") LIKE contract_start, to_date (1 January 2012 ',' MON-DD-YYYY') AS contract_end FROM dual

    UNION ALL

    To_date '10', SELECT (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '10', SELECT (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    To_date '20', SELECT (January 1, 2011 ',' MON-DD-YYYY ""), to_date (1 January 2012 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '20', SELECT (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '20', SELECT (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    To_date '30', SELECT (January 1, 2011 ',' MON-DD-YYYY ""), to_date (1 January 2012 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '30', SELECT (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '30', SELECT (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    To_date '40', SELECT (January 1, 2011 ',' MON-DD-YYYY'), to_date (1 January 2012 ',' MON-DD-YYYY') FROM dual

    UNION ALL

    To_date '40', SELECT (January 1, 2010 ',' MON-DD-YYYY'), to_date (December 31, 2011 ',' MON-DD-YYYY') FROM dual

    UNION ALL

    To_date '40', SELECT (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    To_date '50', SELECT (January 1, 2011 ',' MON-DD-YYYY ""), to_date (1 January 2012 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '50', SELECT (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '50', SELECT (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    To_date '60', SELECT (January 1, 2011 ',' MON-DD-YYYY ""), to_date (1 January 2012 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '60', SELECT (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    To_date '60', SELECT (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    ),

    emp_positions AS

    (

    SELECT '10' AS emp_id, '43XY' AS title_id, to_date (January 1, 2011 ',' MON-DD-YYYY "") LIKE position_start, to_date (1 January 2012 ',' MON-DD-YYYY') AS position_end FROM dual

    UNION ALL

    SELECT ' 10', '47NT', to_date (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    SELECT ' 10', '41JE', to_date (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    SELECT ' 20', '48AW', to_date (January 1, 2011 ',' MON-DD-YYYY ""), to_date (1 January 2012 ',' MON-DD-YYYY') OF double

    UNION ALL

    SELECT ' 20', '42KD', to_date (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    SELECT ' 20', '46LD', to_date (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    SELECT ' 30 ', 45 MI', to_date (January 1, 2011 ',' MON-DD-YYYY'), to_date (1 January 2012 ',' MON-DD-YYYY') FROM dual

    UNION ALL

    SELECT ' 30', '44KH', to_date (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    SELECT ' 30', '43LL', to_date (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    SELECT ' 40', '41', to_date (January 1, 2011 ',' MON-DD-YYYY ""), to_date (1 January 2012 ',' MON-DD-YYYY') OF double

    UNION ALL

    SELECT ' 40', '40', to_date (January 1, 2010 ',' MON-DD-YYYY ""), to_date (December 31, 2011 ',' MON-DD-YYYY') OF double

    UNION ALL

    SELECT ' 40', '42DX', to_date (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    UNION ALL

    SELECT ' 50', '48IB', to_date (January 1, 2011 ',' MON-DD-YYYY ""), to_date (1 January 2012 ',' MON-DD-YYYY') OF double

    UNION ALL

    SELECT '50 ', 47 DL', to_date (January 1, 2010 ',' MON-DD-YYYY'), to_date (December 31, 2011 ',' MON-DD-YYYY') FROM dual

    UNION ALL

    SELECT ' 50', '42A', to_date (January 2, 2012 ',' MON-DD-YYYY ""), double NULL

    )

    SELECT

    1. ES.emp_id,
    2. ES.last_name,
    3. ES.first_name,
    4. EP.title_id,
    5. EP.position_start,
    6. EP.position_end

    Employees are

    LEFT JOIN emp_contracts ec

    ON ec.emp_id = es.first_name

    LEFT JOIN emp_positions ep

    ON ep.emp_id = es.emp_id

    WHERE ec.contract_end IS NULL AND ep.position_end IS NULL

    Hello

    AquaNX4 wrote:

    Good day ladies------Gentlemen\ gurus-Experts-and Al:

    Just when I thought I got my mind wrapped around the notion of NULL value, as defined by Oracle, I met what follows below.  Basically, what you are watching is how our employees of the human resources tables are set up (for the most part).  We have the employees, employee contracts table and the tables of positions.  When I want to make a list of active staff, I always use the filter end date, you will see below in the Super request, essentially looking for staff who do not have a contract AND a position end date entered in the DB.  It works like a charm.  However, today, I noticed an official on the list, who has never had a position is entered in the comic book, and he had an 'open' contract  In my example below, why would "Hal Jordan" appear on the active staff list?  Yes, he spends the first part of my predicate (contract_end is null), but it does not work (at least by my understanding) past the second part of the predicate which is position_end has the value NULL because there not even a record is entered in the comics!  Why would he appear?  Is it because of the LEFT JOIN or a NULL rule type, I'm not aware of?  ...

    It's the outer join.

    When you say

    Employees are

    LEFT JOIN emp_positions ON ep.emp_id = es.emp_id ep

    then, at the time when the WHERE clause is evaluated, the result set contains at least 1 row for each line of employees.  If there is no line in emp_postitions that meet the join condition, then all the columns that should be provided by the emp_positions table will be NULL. This is precisely what concerns the outer join.

    Think about it for a minute.  NULL means the absence of any value.  Is there is no corresponding row in the emp_positions table, then there is no value for emp_position.position_end.  If so doesn't; "have a value, then, by definition, it is NULL.

    It if were not NULL, then this would mean that it had a value.  Would what value?  Why the request would give him one value rather than another?

    Thanks for the display of the data of the sample; It's always useful!

  • Double left join creates a unwanted loop...

    I have therefore two paintings, I need to extract the counts of "tickets".

    I want to have the date given match then I use a 'connect by level' so that the same dates without data will have records in the result set.

    There are two tables I want to join on this "timeline" when I join each of them that individually, it works but when I join together that there is an order of operations issue I'm not sure how to move.

    ORIGINAL DATA:

    TABLE SMINCREQ:

    OPEN_DATE NUMBER
    JANUARY 12, 2015IM392039
    JANUARY 12, 2015IM399495
    JANUARY 12, 2015RM394950
    JANUARY 13, 2015IM394958
    JANUARY 13, 2015
    RM394958

    TABLE SMINTERACTIONS:

    OPEN_DATE INCIDENT_ID
    JANUARY 12, 2015SD394858
    JANUARY 12, 2015SD399495
    JANUARY 12, 2015SD394950
    JANUARY 13, 2015SD394958
    JANUARY 13, 2015
    SD394958

    THE QUERY:

    SELECT to_char(DAYS_,'DD-MON-YYYY'),
          
          sum(decode(INSTR(SMINCREQ."NUMBER",'IM'),'1','1',0)) "INCIDENT",
          sum(decode(INSTR(SMINCREQ."NUMBER",'RM'),'1','1',0)) "REQUEST"
         --sum(decode(INSTR(SMINTERACTIONS.INCIDENT_ID,'SD'),'1','1',0)) "INTERACTION"  
          FROM
      ( SELECT (TRUNC(to_date(SYSDATE-ROWNUM),'DD')) DAYS_ FROM DUAL
    CONNECT BY LEVEL <= (SELECT 14 FROM DUAL)
      ) THE_TIMELINE
        LEFT OUTER JOIN SMINCREQ ON  (to_char(DAYS_,'DD-MON-YYYY')=to_char(SMINCREQ.OPEN_TIME,'DD-MON-YYYY')  and (OPEN_GROUP like '%HELP%'))
        --LEFT OUTER JOIN SMINTERACTIONS on (to_char(DAYS_,'DD-MON-YYYY')=to_char(SMINTERACTIONS.OPEN_TIME,'DD-MON-YYYY')  and PRIMARY_ASSIGNMENT_GROUP like '%HELP%')
        GROUP BY to_char(DAYS_,'DD-MON-YYYY') ORDER BY to_char(DAYS_,'DD-MON-YYYY')
      ;
    
    

    When I run the present and just get the number of SMINCREQ is

    DATEINCIDENTSREQUEST
    JANUARY 12, 20151034
    JANUARY 13, 20155910

    When I run the query for SMINTERACTIONS I get

    DATEINTERACTION
    JANUARY 12, 201555
    JANUARY 13, 201550

    When I try to run the two left joins them together I get:

    DATEINCIDENTSAPPLICATIONSINTERACTIONS
    JANUARY 12, 201556652205885
    JANUARY 13, 201529505003450

    I know that what is happening is a loop where the date is is developed in a relationship 1 to many through the joints and then the GROUP is not the case until the end.

    What I want to achieve is:

    DATEINCIDENTSREQIESTINTERACTION
    JANUARY 12, 2015103455
    JANUARY 13, 2015591050

    Thanks for the tips

    I decided to go this route that will just join the new data (INTERACTIONS) of INCIDENTS already implemented and APPLICATIONS:

    SELECT NULL LINK,DAYS,INCIDENT,"REQUEST",sum(decode(INSTR(SMINTERACTIONS.INCIDENT_ID,'SD'),'1','1',0)) "INTERACTION" from(
    
    SELECT to_char(DAYS_,'DD-MON-YYYY') DAYS,sum(decode(INSTR(SMINCREQ."NUMBER",'IM'),'1','1',0)) "INCIDENT",
          sum(decode(INSTR(SMINCREQ."NUMBER",'RM'),'1','1',0)) "REQUEST"
          FROM
      ( SELECT (TRUNC(to_date(SYSDATE-ROWNUM),'DD')) DAYS_ FROM DUAL
     CONNECT BY LEVEL <= (SELECT 14 FROM DUAL)
      ) THE_TIMELINE
        LEFT OUTER JOIN SMINCREQ ON  (to_char(DAYS_,'DD-MON-YYYY')=to_char(SMINCREQ.OPEN_TIME,'DD-MON-YYYY')  and (OPEN_GROUP like '%HELP CENTER%')
    )
    
        GROUP BY to_char(DAYS_,'DD-MON-YYYY') ORDER BY to_char(DAYS_,'DD-MON-YYYY')
    ) LEFT JOIN SMINTERACTIONS on (DAYS=to_char(OPEN_TIME,'DD-MON-YYYY') and (PRIMARY_ASSIGNMENT_GROUP like '%HELP CENTER%'))
    GROUP BY DAYS,INCIDENT,"REQUEST" order by DAYS ASC;
    

    Thanks for all the entries...

  • Left join

    Hello world

    Im trying to create the query that displays the values that are not available in the other table.

    Scenario:

    I have two tables, the material and materialfolder. I want to display documents that are not available in materialfolder.

    Here's my query

    SELECT m.material_id
        ,  m.MATERIAL_TYPE_ID
        ,  m.name
        ,  m.created
            FROM material m
            LEFT  JOIN materialfolder mf ON m.material_id = mf.material_id
            where to_char(m.CREATED, 'yyyy') >= ('2011')
            and to_char(m.CREATED, 'yyyy') <= ('2013');
    
    

    The result does not show the correct values. Don't know what my error here...

    Hoping that someone could help me.

    Thank you.

    Kind regards

    Ed

    Hello

    If you just want to know the values that are not available in materialfolder, use a NOT EXISTS condition:

    SELECT m.material_id

    m.MATERIAL_TYPE_ID

    $m.name

    m.created

    MATERIAL m

    If NOT EXISTS (select null from materialfolder mf

    where m.material_id = mf.material_id

    )

    AND m.CREATED > = TO_DATE('01/01/2011', 'dd/mm/yyyy') AND m.CREATED< to_date('01/01/2014',="">

  • LEFT JOIN DUPLICATION PROBLEM

    Hello

    I'm having a problem with the left join query, when I join table a two table based on column task1 I get duplicate in table1.task1, table1.price.

    Table1. Task1Table1. Pricetable2. Task1table2. Resourcetable2. Price
    001100001A50
    001100001B250

    How can I make a request to get a result as below.

    Table1. Task1Table1. Pricetable2.Task2table2. Resourcetable2. Price
    001100001A50
    001B250

    Thank you.

    Note that your query uses an inner join. Your original question mentioned a join left, generally interpreted as meaning a left OUTER join.

    Anyway, according to Frank, you can use the BREAK command in SQL * Plus for the goal sought through formatting. You can also use an analytical function as Roger suggests. I think ROW_NUMBER() might do the trick, but we must be clear about the criteria for partitioning and ordering the results, for example

    WITH table1 AS (
      SELECT '001' AS task1
           , 100 AS price
      FROM   dual
    ), table2 AS (
      SELECT '001' AS task1
           , 'A' AS resources
           , 50 AS price
      FROM   dual
      UNION ALL
      SELECT '001' AS task1
           , 'B' AS resources
           , 250 AS price
      FROM   dual
    )
    SELECT DECODE(ROW_NUMBER() OVER (PARTITION BY t1.task1, t1.price ORDER BY t2.resources, t2.price),1,t1.task1) AS task1_alt
         , DECODE(ROW_NUMBER() OVER (PARTITION BY t1.task1, t1.price ORDER BY t2.resources, t2.price),1,t1.price) AS price_alt
         , t2.task1 AS task_with_resource
         , t2.resources
         , t2.price
    FROM   table1 t1
    INNER JOIN table2 t2
    ON     t1.task1 = t2.task1
    ORDER BY t1.task1, t1.price, t2.resources, t2.price;
    
  • How to avoid the union and use a left join

    Hello

    I have the following tables

    {code}

    create the table mainTable

    (col1 varchar2 (2) varchar2 (2) col2, col3 varchar2 (2), col4 varchar2 (2));

    create table secTable

    (col1 varchar2 (2));

    create the table secTable1

    (col2 varchar2 (2));

    create the table secTable2

    (col3 varchar2 (2));

    Insert in maintable

    values ('a', 'b', 'this,' would be ');

    Insert in maintable

    values (', 'o', 'n', 'p');

    insert into secTable

    values ('a');

    insert into secTable1

    values ('b');

    insert into secTable2

    values ('c');

    commit;

    {code}

    I made a request, drank, I would use join without clause union how can I change to receive the same result as the following query?

    {code}

    Select t1.*, 'bad value' | T1.Col1
    from maintable t1
    T1.Col1 left join t2 = t2.col1 sectable
    where t2.col1 is null
    Union of all the
    Select t1.*, 'bad value' | T1.col2
    from maintable t1
    Join t2 left on t1.col1 = t2.col2 sectable1
    where t2.col2 is null
    Union of all the
    Select t1.*, 'bad value' | T1. COL3
    from maintable t1
    Join t2 left on t1.col1 = t2.col3 sectable2
    where t2.col3 is null

    {code}

    Thank you

    Coco

    Like this?:

    SQL > SELECT col1, col2, col3, col4, xvalue

    2 from (SELECT m0.*

    3, NVL (t0.col1, 'bad value t0' | m0.col1) t0_col1

    4, NVL (t1.col2, 'bad value t1' | m0.col2) t0_col2

    5, NVL (t2.col3, 'bad value t2' | m0.col3) t0_col3

    Maintable m0 6

    LEFT OUTER JOIN sectable t0 7

    8. WE (m0.col1 = t0.col1

    9 AND t0.col1 IS NULL)

    10 LEFT OUTER JOIN sectable1 t1

    11. WE (m0.col1 t1.col2 =

    12 AND t1.col2 IS NULL)

    13 LEFT OUTER JOIN t2 sectable2

    14. WE (m0.col1 = t2.col3

    15 t2.col3 AND IS NULL))

    16 UNPIVOT INCLUDES NULL values (xvalue wrongly IN (t0_col1, t0_col2, t0_col3))

    17 ORDER BY xvalue

    18.

    COL1 COL2 COL3 COL4 XVALUE

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

    a b c d bad value t0 a

    m o n p bad value m t0

    a b c d bad value t1 b

    m o n p o t1 value of evil

    a b c d bad value t2 c

    m o n p value t2 n bad

    6 selected lines.

Maybe you are looking for