MS SQL :: Нечто похожее на NOT IN ()

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

MS SQL :: Нечто похожее на NOT IN ()

Сообщение skiperski » 20.11.2003 (Чт) 15:50

Есть таблица. Из неё нужно удалить записи не удовлетворяющие условию INNER JOIN с другой таблицей. Проблема в том, что в исзодной таблице нет поля с уникальным индексом. Иначе можно было бы использовать конструкцию вида
Код: Выделить всё
DELETE FROM table1
WHERE Id NOT IN (
    SELECT table1.Id FROM table1
    INNER JOIN table2 ON table2.Id = table1.Id
)

А нужно ассоциировать составной индекс, т.е. больше чем одно поле.

Кажется, где-то здесь видел нечто подобное, но не могу даже примерно вспомнить когда и как это выглядело. А может это просто дежавю?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 21.11.2003 (Пт) 14:56

Чегой-то никто не отвечает... Тогда у меня есть предложение:
создать VIEW из INNER JOIN, а потом применить NOT EXISTS.

Код: Выделить всё
delete from MyTable1 where not exists
(select * from MyView where
(MyTable1.f1 = MyView.v1) and (MyTable1.f2 = MyView.v2) and (MyTable1.f3 = MyView.v3))


Вроде как работает :roll:

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 21.11.2003 (Пт) 20:36

Именно это и было нужно.
Я реализовал конкатенацией полей, но вариант с NOT EXISTS хоть и более громоздок в написании, но не такой тормозной.
Спасибо.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 24.11.2003 (Пн) 10:52

Я рада, что мое решение пригодилось.
И спасибо за ответ - всегда интересно, решилась проблема или нет.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 24.11.2003 (Пн) 20:43

За сим клозед :)
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 123

    TopList