Outer Join Q - Help pls
Hi guys,.I hope everyone had a nice Easter. I have a question about my request. Here are my paintings,
STUDENT TABLE:
ID NAME
123 JIM SMITH
456 KEN TWIST
EMAIL_TABLE:
ID EMAIL_CODE EMAIL_ADDRESS
123 AA [email protected]
123 AA [email protected]
123 BB [email protected]
456 BB [email protected]
OUTPUT:
ID NAME EMAIL_ADDY1 EMAIL_ADDY2
123 JIM SMITH [email protected] [email protected]
456 KEN TWIST
Here's my query:select s.ID,
s.NAME
max(a.EMAIL_ADDRESS) email_addy1,
min(b.EMAIL_ADDRESS) email_addy2
from student s, email_tab a, email_tab b
where a.id = s.id
and a.email_code = 'AA'
and b.id = s.id
and b.email_code = 'AA'
and a.id = b.id
and a.email_code = b.email_code
group by ID, NAME
My question is, with this query, I get only students who has a code of 'AA' e-mail, I also want to show students without the 'AA' code, but e-mail will be empty.Thank you very much.
Amy
Published by: user5737516 on April 12, 2012 07:12
One way, which is a slight adaptation of your code...
select s.ID,
s.NAME
max(case when a.email_code = 'AA' then a.EMAIL_ADDRESS else null end) email_addy1,
min(case when b.email_code = 'AA' then b.EMAIL_ADDRESS else null end) email_addy2
from student s, email_tab a, email_tab b
where a.id = s.id
and b.id = s.id
and a.id = b.id
and a.email_code = b.email_code
group by ID, NAME
Tags: Database
Similar Questions
-
Hello
Does anyone know why this outer join does not...
[
but they don't...AND TRUNC (SYSDATE) BETWEEN eh.emp_hhold_start_date AND eh.emp_hhold_stop_date (+)
Thank youAND TRUNC (SYSDATE) >= eh.emp_hhold_start_date (+) AND TRUNC (SYSDATE) <= eh.emp_hhold_stop_date (+)
ChristineAND TRUNC (SYSDATE) BETWEEN eh.emp_hhold_start_date(+) AND eh.emp_hhold_stop_date (+) ---------------------------------------------------^^^
You are missing the outer join operator
-
HELP SQL (auto / full outer join with date corresponding)
I'm having a hard time get this query nailed... hoping someone can help me sorted.
create table tab1 (identification number,
date of eff_date,
Code1 varchar2 (2),
Code2 varchar2 (2)
)
/
insert into tab1 values (2, to_date('2015-01-14','YYYY-MM-DD'), 'DAT', 'AS');
insert into tab1 values (2, to_date('2015-03-19','YYYY-MM-DD'), 'DAT', 'AS');
insert into tab1 values (2, to_date('2015-08-28','YYYY-MM-DD'), 'DAT', 'AS');
insert into tab1 values (2, to_date('2015-11-12','YYYY-MM-DD'), 'DAT', 'AS');
insert into tab1 values (2, to_date('2015-01-03','YYYY-MM-DD'), "DAT", "AE");
insert into tab1 values (2, to_date('2015-03-14','YYYY-MM-DD'), "DAT", "AE");
insert into tab1 values (2, to_date('2015-04-18','YYYY-MM-DD'), "DAT", "AE");
insert into tab1 values (2, to_date('2015-09-14','YYYY-MM-DD'), "DAT", "AE");
insert into tab1 values (2, to_date('2015-01-14','YYYY-MM-DD'), "DAT", "BS");
insert into tab1 values (2, to_date('2015-02-14','YYYY-MM-DD'), "DAT", "BS");
insert into tab1 values (2, to_date('2015-03-14','YYYY-MM-DD'), "DAT", "BS");
insert into tab1 values (2, to_date('2015-05-14','YYYY-MM-DD'), 'DAT', 'BE');
insert into tab1 values (3, to_date('2015-09-16','YYYY-MM-DD'), 'DAT', 'AS');
insert into tab1 values (3, to_date('2015-04-16','YYYY-MM-DD'), "DAT", "AE");
tab1
ID, date, code 1, code2
2. DID DAT 2015-01-14
2. DID DAT 2015-03-19
2. DID DAT 2015-08-28
2. DID DAT 2015-11-12
2 AE DAT 2015-01-03
2 AE DAT 2015-03-14
2 AE DAT 2015-04-18
2 AE DAT 2015-09-14
2 BS DAT 2015-01-14
2 BS DAT 2015-02-14
2 BS DAT 2015-03-14
BE DAT 2 2015-05-14
3. DID DAT 2015-09-16
3 AE DAT 2015-04-16
What I need to do...
1 auto join to match EI for each partition ID
2. THAT the date must be less than or equal to the date of the AE and when there is more then a line corresponding to this criterion has chosen the date of closest EI of the date of the ACE.
3. it must be a full outer join because I want to show all lines, even if it is not a match. There is a beginning, but not record end end gold but no record of departure
4. If there is an AE line for many AS lines (the SA date is less then equals the date of EI) then join this AE line to all 3 rows of ACE
5. the same rules for BS and BE.
result should look like this.
ID, date, code 1, id_1 code2, date_1, code1_1, code2_1
2 2015-01-14 DAT AS 2 AE DAT 2015-03-14
2 2015-03-19 DAT AS 2 AE DAT 2015-04-18
2 2015-08-28 DAT AS 2 AE DAT 2015-09-14
2 2015-11-12 DAT DID ZERO ZERO ZERO ZERO
NO NO NO NO 2 AE DAT 2015-01-03
2015-01-2 14 DAT BS 2 BE DAT 2015-05-14
2015-02-2 14 DAT BS 2 BE DAT 2015-05-14
2015 03-2 14 DAT BS 2 BE DAT 2015-05-14
3 2015-09-16 DAT DID ZERO ZERO ZERO ZERO
NO NO NO NO 3 AE DAT 2015-04-16
My attempt was somewhat along these lines (dealing only with SA / combos AE) but it does not manage the many scenarios one (req 4).
Select a.*, b.* from
(select row_number () on the rn (partition by a.id order a.eff_date), a.*)
of tab1 where a.code2 = 'AS') a
full outer join
(select row_number () on the rn (b.eff_date order by b.id partition), b.*)
tab1 b where b.code2 = 'Æ') b
on a.id = b.id
and a.rn = b.rn
and a.eff_date < = b.eff_date
Hello
owbdev99 wrote:
I'm having a hard time get this query nailed... hoping someone can help me sorted.
create table tab1 (identification number,
date of eff_date,
Code1 varchar2 (2),
Code2 varchar2 (2)
)
/
insert into tab1 values (2, to_date('2015-01-14','YYYY-MM-DD'), 'DAT', 'AS');
...
Thanks for posting the CREATE TABLE and INSERT. I know it can be a lot of trouble. You want to get answers that work, not you? Make sure that the statements you post too much work. Test (and, if necessary, attach) your statements before committing. You said code1 be VARCHAR2, but all the instructions insertion have values of 3 characters for code1.
You are on the right track, with an analytical function, but ROW_NUMBER solves this problem. 1 "THAT line" could correspond to the 1st, 2nd, 3rd or any other line 'AE' and vice versa. Try to use the analytical MIN function instead or ROW_NUMBER, like this:
WITH got_next_e_date AS
(
SELECT id, eff_date, code1, code2
MIN (CASE
WHEN SUBSTR (code2, 2) = 'E '.
THEN eff_date
END
) OVER (PARTITION BY ID.
, SUBSTR (code2, 1, 1)
ORDER BY eff_date DESC
) AS next_e_date
OF tab1
)
s AS
(
SELECT *.
OF got_next_e_date
"WHERE SUBSTR (code2, 2) s ="
)
e
(
SELECT *.
OF got_next_e_date
WHERE SUBSTR (code2, 2) = 'E '.
)
SELECT s.id
s.eff_date
s.code1
s.code2
e.id AS id_1
e.eff_date AS eff_date_1
e.code1 AS code1_1
e.code2 AS code2_1
S
FULL OUTER JOIN e ON s.id = e.id
AND s.next_e_date = e.eff_date
AND SUBSTR (s.code2, 1, 1) = SUBSTR (e.code2, 1, 1)
ORDER OF NVL (s.id, e.id)
, NVL (SUBSTR (s.code2, 1, 1)
, SUBSTR (e.code2, 1, 1)
)
s.eff_date
;
Out (as you asked):
ID EFF_DATE CODE1, CODE2 ID_1 EFF_DATE_1 CODE1_1 CODE2_1
--- ---------- ----- ----- ----- ---------- ------- -------
2 2015-01-14 DAT AS 2 AE DAT 2015-03-14
2 2015-03-19 DAT AS 2 AE DAT 2015-04-18
2 2015-08-28 DAT AS 2 AE DAT 2015-09-14
2. DID DAT 2015-11-12
2 AE DAT 2015-01-03
2015-01-2 14 DAT BS 2 BE DAT 2015-05-14
2015-02-2 14 DAT BS 2 BE DAT 2015-05-14
2015 03-2 14 DAT BS 2 BE DAT 2015-05-14
3. DID DAT 2015-09-16
3 AE DAT 2015-04-16
I guess code2 is always 2 characters, and the 2nd character is always ' or 'E '.
I assume that the combination [id, eff_date, code2] is unique.
If these assumptions are wrong, you need a few minor changes, but nothing big.
-
Help for a LEFT OUTER JOIN query
Hello, all,.
I'm having some trouble setting up an Oracle 11 g Server SQL query, and I could use some help.
Let's say tableA is blogs; tableC is comments for blog entries; tableB is the associative array:
tableA blogID blogTitle blogBody dateEntered 1 This is a test More text... 2016-05-20 11:11:11 2 More testing Still more! 2016-05-19 10:10:10 3 Third charm!! Blah, blah. 2016-05-18 09:09:09
tableC commID userID userText dateEntered 10 Bravo I like it! 2016-05-20 11:21:31 11 Charlie I don't! 2016-05-20 11:31:51 12 Alpha Do it again! 2016-05-19 10:20:30 13 Bravo Still more? 2016-05-19 10:30:50 14 Charlie So, what? 2016-05-19 10:35:45 15 Bravo Blah, what? 2016-05-18 09:10:11 16 Alpha Magic number! 2016-05-18 09:11:13
tableB blogID commID 1 10 1 11 1 12 2 13 2 14 3 15 3 16
I'm trying to get blogID, blogTitle, blogBody and the number of comments for each blog entry. But, since I'm on to_char() for date and COUNT (commID) for the total number of comments, I am not "a group by expression.
Here is an example of pseudo-SQL of what I'm trying.
SELECT a.blogID, a.blogTitle, a.blogBody, to_char(a.dateEntered,'YYYY-MM-DD HH24:MI:SS') as dateEntered, COUNT(c.commID) as total FROM tableA a LEFT OUTER JOIN tableB b ON b.blog_ID = a.blog_ID LEFT OUTER JOIN tableC c ON c.commID = b.commID WHERE a.blogID = '1' GROUP BY blogID, blogTitle, blogBody ORDER BY to_date(dateEntered,'MM-DD-YYYY HH24:MI:SS') desc
I'm sure it's something simple, but I just DO NOT see it. Can you help me?
V/r,
^_^
Try:
GROUP BY a.blogID, a.blogTitle, a.blogBody, to_char(a.dateEntered,'YYYY-MM-DD HH24:MI:SS')
See you soon
Eddie
-
Outer joins to the left... Please help!
Hmm. Ive had trouble with this one for a while and have read and re-read docs etc.
IM under 11.2 XE and its Apex 4.2 application...
Its a simple query with outer joins... but I can't simply to do it right after several hours of trying! ID be very grateful if anyone can lend a hand...
For the query below. I am looking for the following:
Complete list of entities, a sum of the values if they exist (and obviously empty if they don't), filtered by a table of SUM choice only the records that match a value in the lookup table.
Select
e.ENTITY as ENTITY,
Sum (p.amount) as Forecast_Income,
Sum (BR.bri_credit) as Actual_Income,
Sum (BR.bri_debit) as Actual_Expenses
Of
e entities
LEFT OUTER JOIN payments p
WE (e.entity_id = p.entity_id)
LEFT OUTER JOIN pmt_stat_lookup ps
WE (p.status_id = ps.status_id
and ps.forecast = 'Y')
LEFT OUTER JOIN bri_recon br
WE (e.entity_id = br.entity_id)
E.entity group
My problem with the join where I join p.status_id for ps.status_id and ps.forecast = 'Y '... If I run the above statement, it seems does not account for this filter criteria and summarizes all records of PAYMENTS, regardless of... If I move outside the outer join clause, it only brings back the records of PAYMENTS where there is a join. Ive tried to join in a different order etc... but in vain...
If someone could help, Id be very grateful.
Kind regards
Richard
Hello Richard
Try this query:
SELECT e.entity as ENTITY
sum (PO.amount) as Forecast_Income
sum (br.bri_credit) as Actual_Income
sum (br.bri_debit) as Actual_Expenses
Of
E ENTITIES
LEFT OUTER
JOIN (SELECT P.entity_id )
P.amount
PAYMENTS P
JOIN PMT_STAT_LOOKUP PS
ON p.status_id = ps.status_id
AND ps.forecast = 'Y '.
) IN.
WE e.entity_id = in. entity_id
LEFT OUTER
JOIN BR BRI_RECON
ON e.entity_id = br.entity_id
E.entity GROUP
;
I hope it helps.
Best regards, David
Post edited by: David Berger
-
Left Outer Join help...
Hello world
I'm still trying to learn the SQL, and I can not specifically with the left outer join. I normally join tables using equijoin, but I don't get the right data set returns, and designed with the help of a left or right outer join would solve the problem...
Here is my SQL that works properly with 1 left outer join. I build the slow query in the SQL following, you will see where I see the error. I don't expect you to understand the data and the columns, I'm trying to join, I think the problems I encounter are related to syntax, and I hope that you can find where are my syntax errors.
Select
s.Name as "Pseudonym,"
SV.view_name as "name of the view.
s_view. Name
Of
s s_screen,
s_screen_view sv
outer join left s_view
WE (sv.view_name = s_view.name)
where
SV.screen_id = ' 1-866 A - 1X3LU' and
s.ROW_ID = sv.screen_id and
s.repository_id = ' 866 A-1-1"and
s_view.repository_id = ' A-1-1 866 ";
Here is the SQL code where I encounter the following error...
Error:
ORA-00904: "SV". "" View_name ": invalid identifier
00904, 00000 - '% s: invalid identifier '.
* Cause:
* Action:
Error on line: column 14: 7
Problematic SQL:
Select
s.Name as "Pseudonym,"
SV.view_name as "name of the view.
s_view. Name,
s_applet. Name as Applet
-b.SID like "name of the cmdlet.
Of
s s_screen,
s_screen_view sv,
wti s_view_wtmpl_it
outer join left s_view
WE (sv.view_name = s_view.name)
outer join left s_applet
WE (wti.name = s_applet.name)
where
SV.screen_id = ' 1-866 A - 1X3LU' and
s.ROW_ID = sv.screen_id and
s.repository_id = ' 866 A-1-1"and
s_view.repository_id = ' A-1-1 866 ";
Thanks in advance for your help.
Chris
> ORA-00904: "S_VIEW_WEB_TMPL." "" ROW_ID ": invalid identifier
I don't see this table in your FROM clause.
-
Looking for right outer join help
Hello
Can anyone help me re - write the query using right below outer join (join ansi) instead of using the (+) symbol.
Select cd.sku_id waitm,
Decode (cl.invn_lock_code, NULL, 'OH', cl.invn_lock_code) WLOCN,
Sum (CD.actl_qty) WQOH
cd, a.case_lock cl, a.case_hdr ch, a.item_master im a.case_dtl
where cd.case_nbr = ch.case_nbr
and cl.case_nbr (+) = ch.case_nbr
and cd.sku_id = im.sku_id
and ch.stat_code < = '64'
Cd.sku_id group,
IM.sku_brcd,
Decode (cl.invn_lock_code, NULL, 'OH', cl.invn_lock_code)
order of cd.sku_id
Kind regards
Gannu
Maybe something like this:
of a.case_dtl cd
Join a.case_hdr ch on (cd.case_nbr = ch.case_nbr)
Join a.item_master im on (cd.sku_id = im.sku_id)
join a.case_lock cl left (cl.case_nbr = ch.case_nbr)
where ch.stat_code<=>=>
I know you asked for right outer join, but I tend to write like that. You can certainly change if you wish.
-
need help with outer join filter.
Need a little help to filter a result set and I can't seem to find a good way to do this.
/*table*/ create table invoice( farinvc_invh_code varchar2(100), farinvc_item varchar2(100), farinvc_po varchar2(100) ) create table po( supplier_number varchar2(60), supplier_invoice_no varchar2(60), po_number varchar2(60), run_date varchar2(60), PO_LINE_NUMBER varchar2(60) );
query execution of im./*data*/ INSERT INTO "INVOICE" (FARINVC_INVH_CODE, FARINVC_ITEM, FARINVC_PO_ITEM) VALUES ('I0554164', '1', 'P0142245'); INSERT INTO "INVOICE" (FARINVC_INVH_CODE, FARINVC_ITEM, FARINVC_PO_ITEM) VALUES ('I0554164', '3', 'P0142245'); INSERT INTO "INVOICE" (FARINVC_INVH_CODE, FARINVC_ITEM, FARINVC_PO) VALUES ('I0554165', '1', 'P0142246'); INSERT INTO "INVOICE" (FARINVC_INVH_CODE, FARINVC_ITEM, FARINVC_PO) VALUES ('I0554165', '2', 'P0142246'); INSERT INTO "PO" (SUPPLIER_NUMBER, SUPPLIER_INVOICE_NO, PO_NUMBER, RUN_DATE, PO_LINE_NUMBER) VALUES ('914100121', '529132260', 'P0142245', '21-NOV-12', '1'); INSERT INTO "PO" (SUPPLIER_NUMBER, SUPPLIER_INVOICE_NO, PO_NUMBER, RUN_DATE, PO_LINE_NUMBER) VALUES ('914100121', '529137831', 'P0142245', '21-NOV-12', '3'); INSERT INTO "PO" (SUPPLIER_NUMBER, SUPPLIER_INVOICE_NO, PO_NUMBER, RUN_DATE, PO_LINE_NUMBER) VALUES ('914100121', '529137831', 'P0142245', '21-NOV-12', '2'); INSERT INTO "PO" (SUPPLIER_NUMBER, SUPPLIER_INVOICE_NO, PO_NUMBER, RUN_DATE, PO_LINE_NUMBER) VALUES ('914100122', '145678', 'P0142246', '22-NOV-12', '1'); INSERT INTO "PO" (SUPPLIER_NUMBER, SUPPLIER_INVOICE_NO, PO_NUMBER, RUN_DATE, PO_LINE_NUMBER) VALUES ('914100122', '145679', 'P0142246', '22-NOV-12', '2');
resultSELECT farinvc_invh_code, supplier_number, supplier_invoice_no, farinvc_item, farinvc_po , po_number, run_date, PO_LINE_NUMBER FROM INVOICE, PO WHERE PO_NUMBER = FARINVC_PO(+) AND FARINVC_ITEM(+) = PO_LINE_NUMBER
It is a much larger table, and I took an excerpt in order to keep things clear and understanding. I would like to filter the result set to only show lines that have po numbers are the same and line are the same but there is an additional element. in other words as such."FARINVC_INVH_CODE" "SUPPLIER_NUMBER" "SUPPLIER_INVOICE_NO" "FARINVC_ITEM" "FARINVC_PO" "PO_NUMBER" "RUN_DATE" "PO_LINE_NUMBER" "I0554165" "914100122" "145678" "1" "P0142246" "P0142246" "22-NOV-12" "1" "I0554165" "914100122" "145679" "2" "P0142246" "P0142246" "22-NOV-12" "2" "I0554164" "914100121" "529132260" "1" "P0142245" "P0142245" "21-NOV-12" "1" "I0554164" "914100121" "529137831" "3" "P0142245" "P0142245" "21-NOV-12" "3" "" "914100121" "529137831" "" "" "P0142245" "21-NOV-12" "2"
"FARINVC_INVH_CODE" "SUPPLIER_NUMBER" "SUPPLIER_INVOICE_NO" "FARINVC_ITEM" "FARINVC_PO" "PO_NUMBER" "RUN_DATE" "PO_LINE_NUMBER" "I0554164" "914100121" "529132260" "1" "P0142245" "P0142245" "21-NOV-12" "1" "I0554164" "914100121" "529137831" "3" "P0142245" "P0142245" "21-NOV-12" "3" "" "914100121" "529137831" "" "" "P0142245" "21-NOV-12" "2"
Hello
Let me assure you that I understand.
Last time, we were looking for the PO_NUMBERs who have been partially put into correspondence , i.e. groups of rows in the order table with the same po_number, which some had corresponding lines in the table Bill, and some of whom have not. It was essential that there is at least 1 line and 1 row without connections with the same purchase order.
Now that you are interested SUPPLIER_INVOICE_NOs who are partially paired, i.e. groups of rows in the table of po with the same po_number and supplier_invoice_no, some of which have corresponding lines in the invoice table, and some are not. ("Supplier_Invoice_No" is quite a mouthful. "We'll abbreviate as sin in the future.) However, the final selection is based on po_numbers: If a po_number has partially matched sins, then we are interested all po_number. For example, the result set must include = 529132260 SIN, even if that sin is completely, because there is a partially matching sin (529137831) with the same po_number (P0142245).As this problem revolves around partially matching sins, let's call them Cardinal sins . We can calculate match_cnt and total_cnt based NAS as well as po_number. Then, we can use another analytic function so see if the po_number has all cardinal_sins, like this:
WITH joined_data AS ( SELECT i.farinvc_invh_code , p.supplier_number , p.supplier_invoice_no , i.farinvc_item , i.farinvc_po , p.po_number , p.run_date , p.po_line_number , COUNT (i.farinvc_po) OVER ( PARTITION BY p.po_number , p.supplier_invoice_no ) AS match_cnt , COUNT (*) OVER ( PARTITION BY p.po_number , p.supplier_invoice_no ) AS total_cnt FROM po p LEFT OUTER JOIN invoice i ON i.farinvc_po = p.po_number AND i.farinvc_item = p.po_line_number ) , got_cardinal_sin_cnt AS ( SELECT joined_data.* , SUM ( CASE WHEN match_cnt >= 1 AND match_cnt < total_cnt THEN 1 END ) OVER (PARTITION BY po_number) AS cardinal_sin_cnt FROM joined_data ) SELECT farinvc_invh_code , supplier_number , supplier_invoice_no , farinvc_item , farinvc_po , po_number , run_date , po_line_number FROM got_cardinal_sin_cnt WHERE cardinal_sin_cnt > 0 ORDER BY po_number , farinvc_item ;
-
Help required in a full outer join
In my view, the query below can be changed at the full outer join. But, I was not able to do.
I need your help to change to the full outer join. My current request isSELECT CLAIMNO,'1' INDX FROM D_CLAIM@CMS2PROD WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null MINUS SELECT CLAIMNO,'1' FROM D_CLAIM WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null UNION SELECT CLAIMNO,'2' FROM D_CLAIM WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null MINUS SELECT CLAIMNO,'2' FROM D_CLAIM@cms2prod WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
Something like:
select nvl(p.claimno,s.claimno) claimno, nvl2(p.claimno,'PROD','STAGING') the_source, :the_clntsys clntsys, :the_facility facility from (select claimno from d_claim where clntsys = :the_clntsys and facility = :the_facility ) p full outer join (select claimno from d_claim@cms2prod /* never tried with remote */ where clntsys = :the_clntsys and facility = :the_facility ) s on p.claimno = s.claimno where p.claimno is null or s.claimno is null
Concerning
Etbin
-
need help for an outer join query
Hi friends...
I have oracle 10g...
I have a question which involve is joining three tables...
the query is as follows:
in my front end application has some delete operations that removes specific data of the IPOADM_BATCH. MKT_SPEC_UV1 due to which the above query is nor fetch all rows.SELECT DISTINCT MU.MKT_ID "PAR ID", MU.MKT_ID "ROOT ID", MSU.SPEC_ID "ID", SU.SPEC_DESC "DESC", SU.SPEC_CD "SPEC CD" FROM IPOADM_BATCH.MKT_UV1 MU, IPOADM_BATCH.MKT_SPEC_UV1 MSU, IPOADM_BATCH.SPEC_UV1 SU WHERE MSU.MKT_ID = MU.MKT_ID AND MSU.SPEC_ID = SU.SPEC_ID AND SU.SPEC_GRP_OR_CMPSTN_CD = 'C';
the relationship between the tables is clearly from the above query...
I have the data in IPOADM_BATCH. MKT_UV1 and IPOADM_BATCH. Table of SPEC_UV1 after the delete operation
now, I want the query above to retrieve data from IPOADM_BATCH. MKT_UV1 with small changes to the above query even if there is no data in IPOADM_BATCH. MKT_SPEC_UV1.
I thought that if I use an outer join I can get it, but here I have to join three tables-join condition is based on the table that doesn't have a data...
so please help me guys how can I change the query to get my desired out put...Hello
There are several different things you could mean by it.
Here's how to join the tables to get one of them:
SELECT DISTINCT mu.mkt_id "PAR ID", mu.mkt_id "ROOT ID", msu.spec_id "ID", su.spec_desc "DESC", su.spec_cd "SPEC CD" FROM ipoadm_batch.mkt_uv1 mu LEFT OUTER JOIN ipoadm_batch.mkt_spec_uv1 msu ON msu.mkt_id = mu.mkt_id LEFT OUTER JOIN ipoadm_batch.spec_uv1 su ON msu.spec_id = su.spec_id AND su.spec_grp_or_cmpstn_cd = 'C' ;
If it does not matter what it is that you want, and then after a small example of data (CREATE TABLE and INSERT, only relevant columns instructions) for all the tables and the results desired from these data.
Highlight a few places where the above querry is the production of incorrect results of your sample data and explains how to get the correct results in these places. -
I have the following table structure,
_ Table - 1
---------------------------------
ID | Information
---------------------------------
1. abcadskasasa
2. asdasdasdasd
3. saeqdfdvsfcsc
---------------------------------
_ Table - 2
---------------------------------
ID | NEST
---------------------------------
1. 12
1. 13
2. 14
1. 15
1. 16
2. 12
---------------------------------
_ Table - 3
---------------------------------
ID | THIERRY
---------------------------------
1. 12
2. 14
1. 15
---------------------------------
Now, I want to choose for each ID in table 1 and the number of MIP in the table 2-number of THIERRY of table 3.
Desired output:_
---------------------------------------------------------------------------------------------------
ID | COUNT_PID | COUNT_PARID
---------------------------------------------------------------------------------------------------
1. 4. 2
2. 2. 1
3. 0 | 0
---------------------------------------------------------------------------------------------------
Could someone please help me with this. I'm doing using outer joins, but as I work mainly at the edge of the end, not able to reach an appropriate solution to that above.
Thanks in advance,
TejasYou should not outer join... That should do it...
select ID , (select count(PID) from table2 t2 where t2.id = t1.id) , (select count(PARID) from table3 t3 where t3.id = t1.id) from table1
-
Hello
I have a requirement in which I need to get data from a third table where a date of the third table is higher than a date in the second array.
Ex:
SELECT t1.column1, t3.column2 FROM t1, t2, t3 WHERE t1.id = t2.foreign_id AND t1.id ( + ) = t3.foreign_id AND t3.some_date_column > t2.another_date_column
However, using the query above returns no results if the date condition is not met. I still need to show t1.column1 and a null t3.column2.
How should I do this?
Thank you
Allen
Edit: Added information about the requirement.
Hi Allen
- SELECT t1.column1, t3.column2
- T1, t2, t3
- WHERE t1.id = t2.foreign_id
- AND t1.id = t3.foreign_id (+)
- AND t3.some_date_column (+) > t2.another_date_column
I guess that this t1.column1 must not be null. Or am I wrong? The + sign must be placed on the side where draws are accepted. You must repeat it for each condition on the table.
Alternativlely you can use the LEFT OUT JOIN syntax. If the two columns are allowed null you need a FULL OUTER JOIN.
BTW: The join to t2 is not required if a refefernce constraint forced.
-
Hi all
I need assistance with SQL FULL OUTER JOIN.
How to write with FULL OUTER JOIN, the query.
I tried like
I have 3 different queries.
Query q: SELECT emp_id LN.emp_id.
Sum (LN_amount) loan_amt
MY_LON_TAB LN
WHERE LN_amount > 20000
LN.emp_id GROUP;
Query b: SELECT PLN. EMP_ID emp_id,
Sum (PLAN_AMOUNT) plan_amt
FROM PLN MY_PLAN_TAB
where PLAN_AMOUNT <>0
GROUP BY PLN. EMP_ID;
Query C:
SELECT FLX. EMP_ID emp_id,
SUM (PRORATE_AMOUNT) PRORATE_AMT
OF MY_FLX_TAB FLX
WHERE PRORATE_AMOUNT <>0
FLX GROUP. EMP_ID;
Suppose that the different subquery above 3 a, b, c respectively. each subquery with emp_id and respective amount.
like a.emp_id, a.loan_amt
b.emp_id, b.plan_amt
c.emp_id, c.prorate_amt
I show all the empid with their amount respective.
schenario: If an account made, but not vice-versa b
and B have record, but not vice versa c
and a credit record but not vice versa c
first: I have external is associated with the A and B
Second: join external then complete the total outcome of (a & b) with c
but empid c just as empty.
My output is:
emp_id a.loan_amt, b.plan_amt c.prorate_amt
101 5000 null null
102 4500 null 2000
103 6700 null null
How to solve the foregoing to the ANSI (FULL OUTER JOIN) method.
Please suggest me.
Thanks in advance...
PKMHello
It is very difficult for anyone to say what you're doing wrong if they do not know what you are doing. Post your code FULL OUTER JOIN.
My best guess is:WITH a AS ( SELECT ... -- What you posted as query a ) , b AS ( SELECT ... -- What you posted as query b ) , c AS ( SELECT ... -- What you posted as query c ) SELECT COALESCE ( a.emp_id , b.emp_id , c.emp_id ) AS emp_id , ... -- whatever other columns you want FROM a FULL OUTER JOIN b ON b.emp_id = a.emp_id FULL OUTER JOIN c ON c.emp_id = COALESCE (a.emp_id, b.emp_id) ;
I hope that answers your question.
If not, post a small example (CREATE TABLE and INSERT statements) data for all tables and the results expected from these data (if not what you have already posted). -
[8i] need help with full outer join combined with a cross join...
I can't understand how to combine a full outer join with a different type of join... is it possible?
Here are some create table and insert for examples of database:
And, the results that I want to get:CREATE TABLE my_tab1 ( record_id NUMBER NOT NULL , workstation VARCHAR2(4) , my_value NUMBER CONSTRAINT my_tab1_pk PRIMARY KEY (record_id) ); INSERT INTO my_tab1 VALUES(1,'ABCD',10); INSERT INTO my_tab1 VALUES(2,'ABCD',15); INSERT INTO my_tab1 VALUES(3,'ABCD',5); INSERT INTO my_tab1 VALUES(4,'A123',5); INSERT INTO my_tab1 VALUES(5,'A123',10); INSERT INTO my_tab1 VALUES(6,'A123',20); INSERT INTO my_tab1 VALUES(7,'????',5); CREATE TABLE my_tab2 ( workstation VARCHAR2(4) , wkstn_name VARCHAR2(20) CONSTRAINT my_tab2_pk PRIMARY KEY (workstation) ); INSERT INTO my_tab2 VALUES('ABCD','WKSTN 1'); INSERT INTO my_tab2 VALUES('A123','WKSTN 2'); INSERT INTO my_tab2 VALUES('B456','WKSTN 3'); CREATE TABLE my_tab3 ( my_nbr1 NUMBER , my_nbr2 NUMBER ); INSERT INTO my_tab3 VALUES(1,2); INSERT INTO my_tab3 VALUES(2,3); INSERT INTO my_tab3 VALUES(3,4);
I tried a number of different things, google my problem and no luck yet...workstation sum(my_value) wkstn_name my_nbr1 my_nbr2 --------------------------------------------------------------- ABCD 30 WKSTN 1 1 2 ABCD 30 WKSTN 1 2 3 ABCD 30 WKSTN 1 3 4 A123 35 WKSTN 2 1 2 A123 35 WKSTN 2 2 3 A123 35 WKSTN 2 3 4 B456 0 WKSTN 3 1 2 B456 0 WKSTN 3 2 3 B456 0 WKSTN 3 3 4 ???? 5 NULL 1 2 ???? 5 NULL 2 3 ???? 5 NULL 3 4
So, what I want, it's a full outer join of t1 and t2 on workstation and a cross join of one with the t3. I wonder if I can't find examples of it online because it is not possible...SELECT t1.workstation , SUM(t1.my_value) , t2.wkstn_name , t3.my_nbr1 , t3.my_nbr2 FROM my_tab1 t1 , my_tab2 t2 , my_tab3 t3 ...
Note: I'm stuck dealing with Oracle 8i
Thank you!!Hello
The query I posted yesterday is a little more complex that it should be.
My_tab2.workstation is unique, there is no reason to make a separate subquery as mt1. We can join my_tab1 to my_tab2 and get the SUM in a subquery.SELECT foj.workstation , foj.sum_my_value , foj.wkstn_name , mt3.my_nbr1 , mt3.my_nbr2 FROM ( -- Begin in-line view foj for full outer join SELECT mt1.workstation , SUM (mt1.my_value) AS sum_my_value , mt2.wkstn_name FROM my_tab1 mt1 , my_tab2 mt2 WHERE mt1.workstation = mt2.workstation (+) GROUP BY mt1.workstation , mt2.wkstn_name -- UNION ALL -- SELECT workstation , 0 AS sum_my_value , wkstn_name FROM my_tab2 WHERE workstation NOT IN ( -- Begin NOT IN sub-query SELECT workstation FROM my_tab1 WHERE workstation IS NOT NULL ) -- End NOT IN sub-query ) foj -- End in-line view foj for full outer join , my_tab3 mt3 ORDER BY foj.wkstn_name , foj.workstation , mt3.my_nbr1 , mt3.my_nbr2 ;
Thanks for posting the CREATE TABLE and INSERT statements, and very clear expected results!
user11033437 wrote:
... So, what I want, it's a full outer join of t1 and t2 on workstation and a cross join of one with the t3.She, exactly!
The trickiest part is when and how get SUM (my_value). You could address the question of exactly what my_tab3 must be attached to a cross that's exactly what should look like the result set of the full outer join between my_tab1 and my_tab2 to. To do this, take your desired results, remove columns that do not come from the outer join complete and delete duplicate rows. You will get:workstation sum(my_value) wkstn_name ----------- ------------- ---------- ABCD 30 WKSTN 1 A123 35 WKSTN 2 B456 0 WKSTN 3 ???? 5 NULL
So the heart of the problem is how to get these results of my_tab1 and my_tab2, which is done in the subquery FOJ above.
I tried to use auto-documenté in my code names. I hope you can understand.
I could spend hours explaining the different parts of this query more in detail, but I don't know that I would lose some of that time, explain things that you already understand. If you want an explanation of the specific element (s), let me know. -
Doubt with OUTER JOIN behavior
I thought I knew all about OUTER JOINS to this scenario. Can pls someone explain how Oracle behaves in the following SQL code:
WITH t1 AS (SELECT 1 as empid from dual union all select 2 from dual), t2 as (select 1 as empid from dual) select * from t1 left outer join t2 on ( t1.empid = t2.empid AND t1.empid=2 );
Expected O/P
EMPID EMPID_1 2 NULL VALUE Real O/P
EMPID EMPID_1 1 NULL VALUE 2 NULL VALUE In this way...
SQL > ed
A written file afiedt.buf1 t1 WITH (SELECT empid from all double union 1
2. Select 2 double),
3 t2 (select 1 as double empid)
4 --
5 Select
6 T1
7 * a left outer join t2 (t1.empid = t2.empid) and t1.empid = 2
SQL > /.EMPID EMPID
---------- ----------
2
1the "t1.empid = 2' is part of the OUTER JOIN condition.
In this way...
SQL > ed
A written file afiedt.buf1 t1 WITH (SELECT empid from all double union 1
2. Select 2 double),
3 t2 (select 1 as double empid)
4 --
5 Select
6 T1
left outer join 7 t2 on (t1.empid = t2.empid)
8 * where t1.empid = 2
SQL > /.EMPID EMPID
---------- ----------
2the "t1.empid = 2" belongs to the filtering conditions
When it is part of the OUTER JOIN condition, he says that he should join t2 records where all conditions are met, otherwise the join should not be made, it does not say it to filter the overall results.
Maybe this helps clarify...
SQL > ed
A written file afiedt.buf1 t1 WITH (SELECT empid from all double union 1
2. Select 2 double),
3 t2 (select empid Union 1 double all the)
4. Select 2 of the double)
5 --
6 select *.
7 T1
8 * a left outer join t2 (t1.empid = t2.empid) and t1.empid = 2
SQL > /.EMPID EMPID
---------- ----------
2 2
1Here we have 1 and 2 records in both tables, but the records in t2 are joined only where the record of t1 has an empid 2, so, although t2 has an empid 1, which is not reached because the join condition is not met.
Maybe you are looking for
-
Re: Missing Bluetooth | HP ENVY 15-j026tx | Windows 8.1
Pouf! No Bluetooth! Here yesterday, has become today! I'm having the same problem with a laptop Envy 17 T J 100... Bluetooth hardware simply disappeared after (I think?) a certain Windows update. Went live with chat support, they invited to uninstall
-
I uninstalled a program before deleting the shortcut first.when I tried to remove the shortcut then it would'nt delete because he couldn't find the program file.
-
Auto power on and off 10 blackBerry
I'm looking for a story on my Z10 I regularly used on my old BB, a Curve 8530. I could put stops automatically at a specific time and then go back hours later. Is it available on Z10?
-
Since I've upgraded to Windows 7, I get a message every time I try to play a video that says that "Windows Media Player cannot play the file because the required video codec is not installed on your computer"
-
The upgrade of the plan creative photography cloud of full membership?
Is it possible to upgrade member of photography for creative cloud (student) full (student) membership?