Inna forma wyrażenia WHERE NOT EXISTS

0

Cześć,

Mam dwa selecty i chciałbym odfiltrować wyniki z drugiego:

SELECT COL INTO #temp_table_1

FROM TABLE1,
TABLE2,
TABLE3

WHERE
TABLE1.ID = TABLE2.ID,
TABLE2.ID = TABLE3.ID,
TABLE3.STATUS = 'A';

SELECT COL INTO #temp_table_2

FROM TABLE1,
TABLE2,
TABLE3

WHERE
TABLE1.ID = TABLE2.ID,
TABLE2.ID = TABLE3.ID,
TABLE3.STATUS = 'B';

SELECT STH FROM #temp_table_1 t1
WHERE NOT EXIST (SELECT 1 FROM #temp_table_2 t2 WHERE t2.COL = t1.COL);

Problem w tym, że muszę się pozbyć tych tymczasowych tabelek i napisać wszystko w jednym select. Ale gdy użyję subqueries zamiast #temp_table_1 i #temp_table_2, kwerenda się przetwarza w nieskończoność.

Jest możliwe aby uzyskać ten sam rezultat i zbliżony runtime używając pojedynczej kwerendy? Ktoś mi powiedział, że mógłbym użyć tutaj UNION, ale nie rozwinął tematu.. Dialekt to Sybase IQ.

0

Nie pokazuj SQl, tylko opisz problem, bo na pewno da się go inaczej rozwiązać...
Chodzi ci o takie COL z Table1, gdzie są w Table3 ze statusem 'A', a nie ma ze statusem 'B'?

0

Tak, tylko w jednej kwerendzie.

0

cos takiego? to jest przypadek dla dwoch statusów

SELECT COL
 
FROM TABLE1,

LEFT JOIN TABLE2 ON TABLE1.ID = TABLE2.ID
LEFT JOIN TABLE3 ON TABLE2.ID = TABLE3.ID

WHERE TABLE3.STATUS = 'A'; 
  AND TABLE2.COL = TABLE1.COL
 
0

Raczej tak:
EDIT: coś sie nie udało...

0

a status może być nullem? bo jeśli nie to może

SELECT COL 
FROM TABLE1
JOIN TABLE3 x ON TABLE1.ID = x.ID AND x.STATUS='A'
LEFT JOIN TABLE3 y ON TABLE1.ID = y.ID AND y.STATUS='B'
WHERE  y.STATUS  IS NULL; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1