Documente Academic
Documente Profesional
Documente Cultură
SELECT DISTINCT 1
INTO :HV
FROM TABLE
WHERE ….
in the future.
Existence check –BAD (2)
SELECT COUNT(*)
INTO :HV
FROM TABLE
WHERE ….
1. DECLARE CURSOR.
(Optimize for 1 row with UR)
2. OPEN CURSOR.
3. FETCH.
4. CLOSE CURSOR.
SELECT 1
INTO :HV
FROM TABLE
WHERE ….
SELECT * FROM T1
WHERE T1.CODE IN
(select T2.code
from T2 where T2.key = ‘X’)
SELECT T1.*
FROM T1 , T2
WHERE T2.KEY = ‘X’
AND T1.CODE=T2.CODE
Sub Select - GOOD
SELECT * FROM T1
WHERE T1.CODE NOT IN
(select T2.code
from T2
where T2.key = ‘X’)
SELECT * FROM T1
WHERE NOT EXISTS Can’t be done
(select 1 as a Join.
from T2
where T1.code=T2.code)
Sub Select – BAD or GOOD ?
Open crs1;
fetch crs1 into…. ;
close crs1
Statistics
Cursor
Sub-Select
Assuming proper index
in both cases !!!
Sub-Query vs. Cursor - Conclusion
SELECT *
FROM MNTB.TVTNSDRA A
WHERE A.LOT_NUMBER IN
(SELECT B.LOT_NUMBER
FROM MNTB.TVTNITUR B
WHERE UNIT = '638‘ AND
B.LOT_NUMBER = A.LOT_NUMBER);
Canceled after 23 minutes elapsed
SELECT A.*
FROM MNTB.TVTNSDRA A,
MNTB.TVTNITUR B
WHERE UNIT = '638‘ AND
B.LOT_NUMBER = A.LOT_NUMBER
WITH UR ;
SELECT *
FROM MNTB.TVTNSDRA A
WHERE A.LOT_NUMBER IN
(SELECT DISTINCT B.LOT_NUMBER
FROM MNTB.TVTNITUR B
WHERE UNIT = '638‘)
WITH UR;
EXEC SQL
SET :HV = CURRENT DATE ;
Sub Select – IN vs. EXISTS (3)
SELECT A, B, C
FROM TAB1 OUTER
WHERE EXISTS
(SELECT 1
FROM TAB2 INNER
WHERE ……);
Sub Select – IN vs. EXISTS (4)
GROUP BY A.KD2
HAVING COUNT(*) = (SELECT COUNT(*) FROM DIV1)
AND NOT EXISTS (SELECT DIV2.KD1
FROM DIV2
WHERE A.KD2=DIV2.KD2