Inna forma wyrażenia WHERE NOT EXISTS

Inna forma wyrażenia WHERE NOT EXISTS
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć,

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

Kopiuj
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.

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
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'?

  • Rejestracja: dni
  • Ostatnio: dni
0

Tak, tylko w jednej kwerendzie.

fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
0

cos takiego? to jest przypadek dla dwoch statusów

Kopiuj
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
 
Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

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

Miang
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1792
0

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

Kopiuj
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; 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.