Re: Этюд для DB программеров
От: PavelD США  
Дата: 07.11.01 00:35
Оценка:
Здравствуйте IT, Вы писали:

IT>Есть две таблицы следующей структуры и содержания:


IT>
IT>#  T1      T2
IT>   F1 F2   F1 F2
IT>1  A  1    A  1
IT>2  B  2    B  2
IT>3  C  2    D  1
IT>4  B  1
IT>5  A  3
IT>

IT>Нужно вывести записи из таблицы T1, в которых комбинация полей НЕ соответствует комбинации полей в таблице T2, т.е. записи с номерами 3, 4, 5.

Три способа :-)
Универсально, но медленно на больших таблицах, т.к. запрос — коррелированный

SELECT *
FROM t1
WHERE NOT EXISTS( SELECT * FROM t2 WHERE t2.f1=t1.f1 and t2.f2=t1.f2)


Если у Вас ORACLE то можно очень просто:
SELECT * FROM t1
MINUS
SELECT * FRM t2

Или так, должно работать быстрее всего:
select t1f1, t1f2
from
(
select t1.f1 t1f1, t1.f2 t1f2, t2.f1 t2f1, t2.f2 t2f2
from t1 left outer join t2 on (t1.f1=t2.f1 and t1.f2=t2.f2)
) t3
where t3.t2f1 is null
and t3.t2f2 is null
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.