left join problem?
I want left join two tables (a, b) where a.account = b.accountNumber number and this join must occur only for the specified account numbers. For this, my request is as follows.Select a.PRIMARY_FIRST_NAME, a.PRIMARY_LAST_NAME, a.ACCOUNT_NUMBER, a.PRIMARY_SSN, a.ADDRESS_1, a.ADDRESS_2,
a.CITY, a.STATE, a.ZIP, b.phone_number, cust_account_details a b.status
Join phone_data b left
on
a.Account_Number = b.account_number
and
a.Account_Number in
('11 ', ' 22')
The above does not work correctly. the join occurs not only for the numbers in the range. What could be the problem?
Try this: -.
select a.PRIMARY_FIRST_NAME,a.PRIMARY_LAST_NAME,a.ACCOUNT_NUMBER,a.PRIMARY_SSN,a.ADDRESS_1,a.ADDRESS_2,
a.CITY,a.STATE,a.ZIP,b.phone_number,b.status from cust_account_details a
left join phone_data b
on
a.account_number=b.account_number
*where*
a.account_number in
('11','22')
Thank you.
Tags: Database
Similar Questions
-
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. Task1 Table1. Price table2. Task1 table2. Resource table2. Price 001 100 001 A 50 001 100 001 B 250 How can I make a request to get a result as below.
Table1. Task1 Table1. Price table2.Task2 table2. Resource table2. Price 001 100 001 A 50 001 B 250 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;
-
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?
-
Outer join problem - revisited
Hello
I'm starting a new thread since my previous post was an inaccurate representation of the problem I have.
I have data that looks like this.
create table cour_off (offNum number, varchar2 (10) courseId, start_date date);
create table activity (number oid, courseId varchar2 (10));
create table ncr_course (course_oid number, incept_date date, expiry_date date);
insert into cour_off values (1, 'MAT101', to_date (' 15 / 05/2012 ', ' DD/MM/YYYY'));
Insert in activity values (10, 'MAT101');
insert into ncr_course values (10, to_date (' 01 / 05/2012 ', ' DD/MM/YYYY'), to_date (' 10 / 05/2012 ', ' DD/MM/YYYY'));
When I write the query using ANSI notation, the query works fine. 1 form is returned with a NULL value for the incept_date column.
Select activity.courseId, ncr_course.incept_date
of cour_off
Join the activity on cour_off.courseId = activity.courseId
activity.Oid left join ncr_course = ncr_course.course_oid
and cour_off.start_date between ncr_course.incept_date
and ncr_course.expiry_date
where cour_off.offNum = 1
However, when the style non ANSI query as shown below, no records are returned.
Select activity.courseId, ncr_course.incept_date
activity, cour_off, ncr_course
where cour_off.offNum = 1
and cour_off.courseId = activity.courseId
and activity.oid = ncr_course.course_oid (+)
and cour_off.start_date between ncr_course.incept_date and ncr_course.expiry_date
I would like to know how I can resolve the application of style not ANSI so that the 1 record is returned.
Thank you!Well, native Oracle outer join does not allow outside join two tables, to do something like:
select courseId, ncr_course.incept_date from ( select activity.courseId, activity.oid, cour_off.start_date from cour_off, activity where cour_off.offNum = 1 and cour_off.courseId = activity.courseId ), ncr_course where oid = ncr_course.course_oid(+) and start_date between ncr_course.incept_date(+) and ncr_course.expiry_date(+) / COURSEID INCEPT_DA ---------- --------- MAT101 SQL>
SY.
-
strange result of Left Join 11 GR 2.
It is a strange result of Left Join
Why the result is 0 record?
select * from v$version; BANNER ------------------------------------------------------- Oracle Database 11g Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for 32-bit Windows: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production
Old Left Join syntax does not work, too :-(Select * From (Select 1 aaa From DUAL) A LEFT JOIN (Select 2 bbb From DUAL Where '1' IN ('2','3')) B ON A.aaa = B.bbb; no rows selected
Select * From (Select 1 aaa From DUAL) A, (Select 2 bbb From DUAL Where '1' IN ('2','3')) B where A.aaa = B.bbb(+); no rows selected
Aketi Jyuuzou wrote:
It is a strange result of Left Join
Why the result is 0 record?I guess that the rewrite of the query with the optimizer is the origin of the problem.
Say the 10053 trace? I don't have access to the database 11 GR 2 now to test.
You can see if the advice of line NO_REWRITE or NO_QUERY_TRANSFORMATION gives the desired result. -
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.
-
Do not repeat with a LEFT JOIN QUERY question
Hello
I would like to know how to display the following results:
Here's my 2 tables: CUSTOMER and SALES*Name*: John Fox *Sales:* 1- LAPTOP 2- HARDDRIVE 3- COMPUTER
My QUERYCUSTOMER _________________ ID NAME GENDER 1 John Mayer F 2 Melissa John F 3 Julie Black F 4 Mickael Fox M 5 John Fox M SALES _________________________ ID ID_CUSTOMER TYPE 1 1 Boat 2 1 TV 3 4 CD PLAYER 4 5 LAPTOP 5 5 HARDDRIVE 6 5 COMPUTER
The problem: if I use the default template, I have:SELECT customer.Name as NAME, customer.Gender, sales.TYPE from customer LEFT JOIN sales ON customer.ID = sales.ID_CUSTOMER WHERE customer.Name = 'John Fox'
I don't want the name of John Fox being repeated in each row.NAME GENDER TYPE John Fox M LAPTOP John Fox M HARDDRIVE John Fox M COMPUTER
I tried to add: #Name # in the DEFINITION of the REGION - REGION HEADER, but I have this result:
So, what can I do to get this result? Change the query?#NAME# NAME GENDER TYPE John Fox M LAPTOP John Fox M HARDDRIVE John Fox M COMPUTER
Thank youName: John Fox Sales: 1- LAPTOP 2- HARDDRIVE 3- COMPUTER
RoselineRoseline salvation,
You can adapt the solution suggested in this post Re: more than 1 records in a single cell
Thank you
Manish -
Including only in rows on a left join
Hi, consider the following (hypothetical example http://www.codinghorror.com/blog/archives/000976.html but a real problem more complex mirror I)
create table test1 (identification number, name varchar2 (10), color varchar2 (10))
create table test2 (identification number, name varchar2 (10), color varchar2 (10))
insert into test1 values (1, 'pirate', 'black')
insert into test1 values (2, 'monkey', 'black')
insert into test1 values (3, 'ninja', 'black')
insert into test1 values (4, 'spaghetti', 'black')
insert into test2 values (1, 'Swede', 'black')
insert into test2 values (2, 'pirate', 'red')
insert into test2 values (3, 'darth', 'red')
insert into test2 values (4, 'ninja', 'black')
*****
Running the following query left join as usual gives the expected result
Select * from test1
outer join test2 left test1.name = test2.name
ID NAME ID NAME COLOR COLOR
1 appropriate appropriate 2 black red
3 black ninja 4 black ninja
null null null 4 black spaghetti
null null null 2 black monkey
****
If I add a restriction on test2.colour, I lose the three rows...
ID NAME ID NAME COLOR COLOR
1 appropriate appropriate 2 black red
1 selected lines
****
I can get 2 of them by re - including NULL values...
ID NAME ID NAME COLOR COLOR
1 appropriate appropriate 2 black red
null null null 4 black spaghetti
null null null 2 black monkey
3 selected lines
But what I want is for the other row where test2.colour is black to come back that looks like this...
ID NAME ID NAME COLOR COLOR
1 appropriate appropriate 2 black red
null null null 3 black ninja
null null null 4 black spaghetti
null null null 2 black monkey
4 selected lines
As you can see, rank test2.id = 4 is here with the id, name, and the null color. How can I do this?
Thank you!
:)
Published by: user3809287 on 15-Sep-2008 03:56****
If I add a restriction on test2.colour, I lose the three rows...ID NAME ID NAME COLOR COLOR
1 appropriate appropriate 2 black red
1 selected lines
No, you don't have to if you add the restriction to the join instead of a filter condition condition:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.8.0 - Production Session altered. SQL> SQL> drop table test1; Table dropped. SQL> drop table test2; Table dropped. SQL> SQL> create table test1 (id number, name varchar2(10), colour varchar2(10)); Table created. SQL> create table test2 (id number, name varchar2(10), colour varchar2(10)); Table created. SQL> SQL> insert into test1 values (1, 'pirate','black'); 1 row created. SQL> insert into test1 values (2, 'monkey','black'); 1 row created. SQL> insert into test1 values (3, 'ninja','black'); 1 row created. SQL> insert into test1 values (4, 'spaghetti','black'); 1 row created. SQL> SQL> insert into test2 values (1, 'rutabaga','black'); 1 row created. SQL> insert into test2 values (2, 'pirate','red'); 1 row created. SQL> insert into test2 values (3, 'darth','red'); 1 row created. SQL> insert into test2 values (4, 'ninja','black'); 1 row created. SQL> SQL> commit; Commit complete. SQL> SQL> select * from test1 2 left outer join test2 on test1.name = test2.name 3 where test2.colour = 'red'; ID NAME COLOUR ID NAME COLOUR ---------- ---------- ---------- ---------- ---------- ---------- 1 pirate black 2 pirate red SQL> SQL> select * from test1 2 left outer join test2 on test1.name = test2.name and test2.colour = 'red'; ID NAME COLOUR ID NAME COLOUR ---------- ---------- ---------- ---------- ---------- ---------- 1 pirate black 2 pirate red 4 spaghetti black 3 ninja black 2 monkey black SQL>
You can read complete Gints Plivna notes on the joints here:
http://www.gplivna.EU/papers/sql_join_types.htm
Kind regards
RandolfOracle related blog stuff:
http://Oracle-Randolf.blogspot.com/SQLTools ++ for Oracle (Open source Oracle GUI for Windows):
http://www.sqltools-plusplus.org:7676 /.
http://sourceforge.NET/projects/SQLT-pp/ -
HP Envy 17 Notebook PC TS left hinge problem
Left hinge on my HP Envy TS 17 Notebook PC pushes the lower lid of my laptop open whenever I open and close my laptop. My desire is quite recent and it is still under the one year warranty.
Hello
Yes. MY problem is solved. Company and I got the replacement unit successfully.
Note: If you have a lot of software installed, especially of VMs on your current laptop, so my personal advice would be to get the repaired unit, I came across the problem to reactivate the license think little software, I do several facilities and refuse activation. However after talking to the licensing issue has been resolved, but it consumes a lot of time.
However, if the activation of the license is not a problem for you then unit replacement is better.
Concerning
PS. but in the new laptop also, I always get a little tic noice when I open and close the laptop from the left hinge. That is why I it opens very slowly. I have just pray and hope that it does not break. because I get 2nd replacement.
--------------------------------------------------------------------------------------------------------------------
Hi JigneshDesai,
mjhuang (honor student) released a new response Notebook Hardware on 27/09/2014 23:47
Subject: Re: HP Envy 17 Notebook PC TS left hinge problem
This answer solve your message or question?
If so, then share the good news! Inform others that this response was helpful in accepting this solution.
You can also show your appreciation by giving congratulations.We appreciate your comments. It's what keeps our community a useful and dynamic place for our members.
Thank you for being a Member!
Forum HP's Support team
-
Hello
Here's 2 queries. First one help for the joints and the second query uses a join ancient. The first works very well and I tried to write the 2nd one to work exactly like the first. I don't know where to put the sub condition sysdate in 2nd query such that there operator.
AND trunc(SYSDATE) BETWEEN hapf.effective_start_date(+) AND hapf.effective_end_date(+)
1.
SELECT papf.full_name, hapf.name position_name FROM per_people_x papf, per_assignments_x pax, hr_all_positions_f hapf WHERE papf.person_id = pax.person_id AND pax.position_id = hapf.position_id(+) AND trunc(SYSDATE) BETWEEN hapf.effective_start_date(+) AND hapf.effective_end_date(+)
2.
SELECT papf.full_name, hapf.name position_name FROM per_people_x papf, per_assignments_x pax LEFT JOIN hr_all_positions_f hapf ON (pax.position_id = hapf.position_id) WHERE papf.person_id = pax.person_id
Any suggestion is appreciated.
Thank you
KK
SELECT papf.full_name,
hapf. Name position_name
THE women's wear per_people_x
JOIN THE
Pax per_assignments_x
ON)
PAPF.person_id = pax.person_id
)
LEFT JOIN
hr_all_positions_f hapf
ON)
Pax.POSITION_ID = hapf.position_id
AND
trunc (sysdate) BETWEEN hapf.effective_start_date AND hapf.effective_end_date
)
/
SY.
-
Hi guys,.
I inherited a previous devloper the query below. T_MAXVALUES has 100,000 rows and T_STA_ERG about 1 m.
The performance is so bad, it works for 5 hours now and I have nothing so I can´t say much about the data of test or how it should look.
It works on Oracle 11 g and I can´t get my head around all JOIN clauses and the ultimate goal but sense that there could be a better way
to achieve what is tried below. All of you guru´s able to immediately spot the big failures?
SELECT DISTINCT T1. PARAMETER, T1. ZERL_MATRIX, T1. MONTHS, T1. ADDITIONAL_CRI,
DECODE (H2. MRL, NULL, (DECODE (H1. MRL, NULL, (DECODE (H3. MRL, NULL, (DECODE (H4. MRL, NULL, NULL, 'R')), 'R')), M1. MRL)), H2. MRL)
OF T_STA_ERG T1
LEFT JOIN (SELECT PARAMETER, ZERL_MATRIX_2, MRL
OF T_MAXVALUES, WHERE ZERL_MATRIX_1 IS NULL) H1
ON T1. PARAMETER = H1. PARAMETER
AND substr (T1. ZERL_MATRIX, 4, 3) = H1. ZERL_MATRIX_2
LEFT JOIN (SELECT PARAMETER, ZERL_MATRIX_1, ZERL_MATRIX_2, MRL
OF T_MAXVALUES
WHERE ZERL_MATRIX_1 IS NOT NULL) H2
ON T1. PARAMETER = H2. PARAMETER
AND substr (T1. ZERL_MATRIX, 1, 3) = H2. ZERL_MATRIX_1
AND substr (T1. ZERL_MATRIX, 4, 3) = H2. ZERL_MATRIX_2
LEFT JOIN (SELECT PARAMETER, ZERL_MATRIX_2, MRL
OF T_MAXVALUES
WHERE ZERL_MATRIX_1 IS NULL) H3
ON T1. PARAMETER = H3. PARAMETER
LEFT JOIN T_MAXVALUES H4
ON substr (T1. ZERL_MATRIX, 1, 3) = H4. ZERL_MATRIX_1
The idea is to get maxvalues lines that at least match the lines of t. The game minimum is the game of columns of the parameter (type 3), or matches the matrix 1 (type 4).
If you get all possible matches, and you will then take the MRLS of the best match: better if the parameter, matrix1 and matrix2 all game, then if parameter and matrix2 match, etc.
What I have not included here are a test for null matrix1. If a match where parameter and matrix2 match, but there's a matrix1 value that does not match the value in T matrix1, will have to be thrown out, then just add this additional condition in the CASE statement.
Untested of course:
Select T1. PARAMETER, T1. ZERL_MATRIX, T1. MONTHS, T1. ADDITIONAL_CRI, Max (MRL) keep dense_rank of first order by type)
Of
(SELECT T1. PARAMETER, T1. ZERL_MATRIX, T1. MONTHS, T1. ADDITIONAL_CRI,
-case when T1. PARAMETER = H.PARAMETER and substr (T1. ZERL_MATRIX, 1, 3) = H2. ZERL_MATRIX_1 AND substr (T1. ZERL_MATRIX, 4, 3) = H2. ZERL_MATRIX_2 then 1
When T1. PARAMETER = H.PARAMETER and substr (T1. ZERL_MATRIX, 4, 3) = H1. ZERL_MATRIX_2 then 2
When T1. PARAMETER = H.PARAMETER then 3
When substr (T1. ZERL_MATRIX, 1, 3) = H.ZERL_MATRIX_1 then 4
end match_type, h.mrl
OF T_STA_ERG T1
LEFT JOIN T_MAXVALUES h on (T1. PARAMETER = H.PARAMETER or substr (T1. (ZERL_MATRIX, 1, 3) = H.ZERL_MATRIX_1)
)
Group T1. PARAMETER, T1. ZERL_MATRIX, T1. MONTHS, T1. ADDITIONAL_CRI;
-
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
- ES.emp_id,
- ES.last_name,
- ES.first_name,
- EP.title_id,
- EP.position_start,
- 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, 2015 IM392039 JANUARY 12, 2015 IM399495 JANUARY 12, 2015 RM394950 JANUARY 13, 2015 IM394958 JANUARY 13, 2015 RM394958 TABLE SMINTERACTIONS:
OPEN_DATE INCIDENT_ID JANUARY 12, 2015 SD394858 JANUARY 12, 2015 SD399495 JANUARY 12, 2015 SD394950 JANUARY 13, 2015 SD394958 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
DATE INCIDENTS REQUEST JANUARY 12, 2015 103 4 JANUARY 13, 2015 59 10 When I run the query for SMINTERACTIONS I get
DATE INTERACTION JANUARY 12, 2015 55 JANUARY 13, 2015 50 When I try to run the two left joins them together I get:
DATE INCIDENTS APPLICATIONS INTERACTIONS JANUARY 12, 2015 5665 220 5885 JANUARY 13, 2015 2950 500 3450 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:
DATE INCIDENTS REQIEST INTERACTION JANUARY 12, 2015 103 4 55 JANUARY 13, 2015 59 10 50 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...
-
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',="">
-
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
-
Satellite A100-LE6 - cannot find a WLAN driver?
I just reinstalled Windows XP on my computer but now my wireless card does not work. I know that I have to install a driver for it, but I can't. In fact, I can not even find my model number on some support pages.Can anyone help? I have a Satellite A1
-
How to do task list manager process in alphabetical order
I don't know what the * I did but I was cleaning my keyboard that gave rise to many keys in presses and when I opened the Task Manager processes were no longer in alphabetical order, they appear from Z to A. How can I fix it? I searched on the net fo
-
Dv6 - 2150CA freezing sometimes - question Intel Matrix?
Hi Cheryl and all,. Two weeks ago, I bought a brand new DV6 - 2150 CA. I reformatted it and installed Windows 7 Ultimate 64 bit. Then, on the site of HP, I downloaded and installed that they: 1 - the new BIOS, 2 - Intel chipset driver and 3 - the Int
-
Age Of Mythology Titans Expansion bad
I installed the pack Age Of Mythology Titans Expansion off PC DVD - ROM that was the original game and expansion. When I tried to open the program Windows Vista (Home Premium Pack on a laptop Aspire 4730z) it kept giving me the message "this progra
-
Comment of the NAC and preconfigured server accounts duration
There seems to be a bug in the way the comment of the NAC Server manages the lifetime pre-configured of guest accounts. I followed the manual and I did: -Set up 3 times (24 h, 48 h and 1 week) under templates/accounts/accounts times. - And the value