LEFT JOIN and performance
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;
Tags: Database
Similar Questions
-
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.
-
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.
-
Problem with Outer join and filter
Hello
I join two tables in the source using a left outer join. Outside of the join, I have a filter specified with condition TabA.C1 > TabB.C2.
Now, when ODI generates the query it puts the left outer join on the filter condition as well. So he puts filter as
where
(1 = 1)
And ((TabA.C1 = TabB.C1 (+)) AND)
(TabA.C2 = TabB.C2 (+))
And TabA.C10 > TabB.C14 (+)
How to avoid this problem. I tried this performance on stage as well, always generated query remains the same.
I use the incremental update of the IKM Oracle. My source and target are both on the same PB.
~ ChikkHi Chikk,
If you analyze the data, you'll see it's OK to have the "(+)" to the filter...
Anyway, if you want to drop it, leave it as inner join and put the "(+)" manually to the join object.
This help you?
-
The task bar is not locked, but he won't move in right or left clicking and dragging.
original title: taskbar is not locked, but he won't move in right or left clicking and dragging. Tried a different mouse, no results.
The task bar will not move but not locked.
Click to the right or left mouse drag, nothing happens.Used another mouse, still no movement.Hello
Method 1:
Try to make an auditor of the system files on your computer and search for errors on the disc: How to use the tool File Checker system to troubleshoot missing or corrupted system files on Windows Vista or Windows 7 http://support.microsoft.com/kb/929833
Method 2:
Step 1:
Start the computer in safe mode and see if the problem occurs. Follow the steps from the link to start in safe mode: http://windows.microsoft.com/en-US/windows7/Start-your-computer-in-safe-mode
Step 2:
Start the computer and check to see if this helps: How to troubleshoot a problem by performing a clean Windows Vista or Windows 7 boot http://support.microsoft.com/kb/929135
Note: when you are finished troubleshooting, follow step 7 to start the computer in normal startup.
Method 3:
Step 1:
Try creating a new user account and check if it works very well: http://windows.microsoft.com/en-us/Windows7/Create-a-user-account
Step 2:
If it works fine, then try to move the files and folders from the old account to the new user account user: http://windows.microsoft.com/en-US/Windows7/Fix-a-corrupted-user-profile
-
Reliability and performance monitor
I use a Vista Home Premium based computer laptop HP.
I find that I can access is no longer the reliability and performance monitor. When I try to access the report, I get the following message to come. Error: An error occurred trying to generate this report. The interface is unknown.
I searched the internet, but have not been able to find a solution.
I use a Vista Home Premium based computer laptop HP.
I find that I can access is no longer the reliability and performance monitor. When I try to access the report, I get the following message to come. Error: An error occurred trying to generate this report. The interface is unknown.
I searched the internet, but have not been able to find a solution.
I know how to solve this problem
Try this:
go to the reliability and performance monitor, then in the section reports on the left, click system diagnostics then delete all generated reports (click on each and then delete) in there, then try to generate the new report.
the reason for this error is that you have canceled or closed the report while he produced it!
I hope this helps!
-
When I left click and drag on my desk his blue gray not how to fix this?
When I left click and drag on my desktop its usually blue and rather theres nothing in the box is just my backround
http://i1135.Photobucket.com/albums/m623/Clarrifyy/Untitled-1.PNGlike that, I want to correct this1. type the word appears in the search box of your Start menu, and then choose adjust performance and appearance of Windows.
2. in the list, "use transparent selection rectangle" lights up, and then click OK. -
I just want you know I hate using this operating system. WIN 7 and WIN 8 on different computers. Years ago the opportunity to correct a bit your * but today we are locked in to sit and watch the fool or spinning cirlces infinite hourglass while your OS continues to steal the memory and performance of any type of material that is using your operating system. I can't wait to own a computer that runs an operating system that doesn't degrade not just because I use it for work and play. There is a special place in * for windows programmers and engineers.
Original title: why windows suck so bad!
Hello
These should help:
Ways to improve the performance of your PC
http://Windows.Microsoft.com/en-us/Windows-8/improve-PC-performanceMaintenance & performance
http://Windows.Microsoft.com/en-us/Windows/performance-maintenance-help#performance-maintenance-help=Windows-8&V2H=win7tab1&V3H=winvistatab1Crashes Windows or freezes
http://support.Microsoft.com/kb/2681286How to speed up your PC
http://support.Microsoft.com/kb/2746761/en-us=======================================================
You use a 3rd party antivirus/antispyware/security program? If so many people
can cause slow start from the bottom.Check with the support of the system Maker (manufacturer of motherboard for customized systems), their
online resources and the drivers and ask questions in the forums about known problems.
Updating the BIOS , drivers of low level chipset and embedded and separate major
device drivers (anyone who can have an impact on the speed of startup and performance).Note the use of Win Key + X and Win Key + W (to go on the Control Panel, Run and parameters
According to needs). Win + D key calls the office and using Win Key active / disable the office and
Splash screen.Check startup programs.
Right-click in the left lower corner - Manager of tasks
Or Windows key + X - Manager of tasks
Or right click on the taskbar - task managerCheck the Startup tab.
More troubleshooting:
How to perform a clean boot for a problem in Windows Vista, Windows 7,
or Windows 8
http://support.Microsoft.com/kb/929135Other programs to help:
Autoruns - free - see what programs are configured to start automatically
When your system boots and you connect. Autoruns also shows you the complete list
Registry and file locations where applications can configure auto-démarrer parameters.
http://TechNet.Microsoft.com/en-us/sysinternals/bb963902.aspx
Process Explorer - free - find out what files, registry keys, and other objects
processes have open, which DLLs they have loaded and more. This unique
powerful utility will show you even owned by each process.
http://TechNet.Microsoft.com/en-us/Sysinternals/bb896653.aspx=======================================================
If necessary:
Try to do a "Refresh your PC without affecting your files" (or modification of your personal data
settings) or even a restore. Be prepared to re - install the programs, applications will remain.
And having redundant backups of your files on the disk main hard is always a
good idea.Windows 8 includes special discount methods (keep files and settings) or a reset
(new installation remove all).How to restore, refresh or reset your PC
http://Windows.Microsoft.com/en-us/Windows-8/restore-refresh-reset-PCHow to create a system image to refresh your PC in Windows 8
http://support.Microsoft.com/kb/2748351How to update Windows 8
http://www.eightforums.com/tutorials/2293-refresh-Windows-8-a.htmlHow to reset Windows 8
http://www.eightforums.com/tutorials/2302-reset-Windows-8-a.htmlIf you need a repair disc:
Create a system repair disc
http://Windows.Microsoft.com/en-us/Windows7/create-a-system-repair-discHow to create a "system repair disc" (CD/DVD) in Windows 8
http://www.eightforums.com/tutorials/2855-system-repair-disc-create-Windows-8-a.htmlHow to create a recovery USB in Windows 8
http://www.eightforums.com/tutorials/5132-recovery-drive-create-USB-flash-drive-Windows-8-a.htmlI hope this helps.
Rob Brown - Microsoft MVP<- profile="" -="" windows="" expert="" -="" consumer="" :="" bicycle="">-><- mark="" twain="" said="" it="">->
-
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.
-
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
- 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',="">
-
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;
-
Interesting behavior of left join
We will create 3 tables as follows:
CREATE TABLE "A1" ()"A1_ID" NUMBER ENABLE NON NULL,CONSTRAINT "A1_PK" SELECT the PRIMARY KEY ('A1_ID') );
CREATE TABLE "A2" ()"A2_ID" NUMBER ENABLE NON NULL,CONSTRAINT "A2_PK" SELECT the PRIMARY KEY ('A2_ID'));
CREATE TABLE "A12" ()'A12_ID' ENABLE NUMBER NOT NULL,'A1_ID' ENABLE NUMBER NOT NULL,'A2_ID' ENABLE NUMBER NOT NULL,"A12_PK" PRIMARY KEY ('A12_ID'), CONSTRAINTREFERENCES of FOREIGN ("A1_ID") of CONSTRAINT "A12_A1_FK1" "BUTUNLESIK" KEY "" A1 "("A1_ID") ENABLE,KEY REFERENCES FOREIGN ("A2_ID") of CONSTRAINT 'A12_A2_FK1' 'BUTUNLESIK '. ("" A2 "("A2_ID") ALLOW);
We insert the values as follows:
Insert into A1 values (1);
Insert into A1 values (2);
Insert into A1 values (3);
Insert 4 A1;
Insert into A1 values (5);
Insert into A1 values (6);
Insert into A2 values (1);
insert into values A12 (1,1,1);
Tables a1 and A2 are just simple tables with primary keys and A12 table contains many-to-many relationship between them.
When I run the query below,
SELECT * A1 A1 A12 A12 LEFT JOIN ON a1.a1_id = a12.a1_id A2 LEFT JOIN A2 ON a2.a2_id = a12.a2_id WHERE a2.a2_id IS NULL;
I get the following results, as I predicted:
A1_ID A12_ID A1_ID A2_ID A2_ID
---------- ---------- ---------- ---------- ----------
6
5
4
3
2
However when I run the second query below (where I select only the a1 id column instead of "*")
SELECT a1.a1_id A1 A1 A12 A12 LEFT JOIN ON a1.a1_id = a12.a1_id A2 LEFT JOIN A2 ON a2.a2_id = a12.a2_id WHERE a2.a2_id IS NULL;
I get nothing, no lines have been selected. When I look at the plan of the second query I see a predicate to filter such as "'NULL IS NOT NULL". " I guess that this does not return results. Is this a bug, or y at - it a satisfactory explanation for this behavior?
Step 1 - check the execution plans.
At first glance, this looks like a variant of https://forums.oracle.com/thread/2594321
Concerning
Jonathan Lewis
Maybe you are looking for
-
Re: I'm looking for Docking Station for Satellite L300
Hello Today, I own a Satellite L300.Now I am looking for a docking port. I only find the dynadock! Is the a real L-series docking station? Not a usb docking station? If someone use the dynaport please tell me if its good. How do I connet dynaport lap
-
HP photosmart c4680 &; win8 no printing
Hello. I update my pc to win 8 x 64 (clean install) I have download the latest drivers and programs on the official site and install it. Scan Windows 8 via hp solution center work ok. But I can't print. Send prints, but not arrived anithing. (I check
-
I get a popup message failed trying to install the KB2570791 update.
I GET A MESSAGE POPUP FAILED WHEN TRYING TO INSTALL UPDATE KB2570791
-
I am back. STOP message 0x0000001a this time.
Hello! I am back. This morning, out of the blue (no pun intended), I got a BSoD with the following error message: STOP 0X0000001A (0X0D863C001, 0X00003DCE, 0 X 00041284, 0XC09930000) I am running XP with SP3 and the only answer I can find on the page
-
What the best graphic card for my Inspiron 3847 - for games
What is the best graphics card on the market which is compatible with my Inspiron 3847. I play all the newest and most anticipated games and need a video card that can follow. Something that requires no update since my current set up to run favorite.