Этюд для DB программеров
От: IT Россия linq2db.com
Дата: 06.11.01 17:24
Оценка:
Есть две таблицы следующей структуры и содержания:

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

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

Я знаю как минимум два способа сделать это:

  1. Переделать структуру таблиц
  2. Использовать временные таблицы или дополнительные поля
Но интересно не прибегать к таким мерам.
Если нам не помогут, то мы тоже никого не пощадим.
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
Re[2]: Этюд для DB программеров
От: IT Россия linq2db.com
Дата: 07.11.01 16:10
Оценка:
Здравствуйте PavelD, Вы писали:

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


PD>Три способа :-)


Спастбо, всё работает, правдо Оракла у меня нет, но первый способ вполне подойдёт.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.