Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Избавление от селекта внутри делете [MySQL]


VictorT ©   (2004-01-27 19:55:00) 

Нужно сделать запрос такого вида, но к сожалению MySQL не поддерживает select внутри delete, как его можно переформулировать?
delete from table1
where field1 in (select field1 from table2)


Sandman25   (2004-01-28 11:12:00) [1]

[6] Johnmen © (28.01.04 10:38)

А если записей милльон? :)


VictorT   (2004-01-28 11:05:00) [2]


> Так ответ сам автор вопроса уже дал...

Только вот автор вопрос вначале неправильно задал :)


Johnmen   (2004-01-28 10:38:00) [3]

Так ответ сам автор вопроса уже дал...VictorT © (27.01.04 21:02) [3]
:)))


Sandman25   (2004-01-28 09:59:00) [4]

У меня дикая идея.
Делаете новую таблицу table3 (копия table1, включая данные), затем
delete table3
from table3, table2
where table3.field1 = table2.field1;
и
delete table1
from table1, table3
where table1.field1 = table3.field1
Потребуется куча памяти, но не будет ограничения на число записей.


Nikolay M.   (2004-01-28 09:18:00) [5]


> Это ж какая переменная получится... в таблицах порядка 30
> тысяч записей

10 000 в IN пролетает на ура. Если там ID, конечно, а не Name VARCHAR(255) :)


VictorT   (2004-01-27 21:02:00) [6]


> список значений через запятую в стринговой переменной

Это ж какая переменная получится... в таблицах порядка 30 тысяч записей


VictorT   (2004-01-27 21:00:00) [7]

Блин, вопрос непавильно поставил. Мне нужно:
delete from table1
where field1 not in (select field1 from table2)


А первый случай реализуется так:
delete table1
from table1, table2
where table1.field1 = table2.field1


Nikolay M.   (2004-01-27 20:46:00) [8]

Только двумя запросами :(
Сначала позапросом получаешь список значений через запятую в стринговой переменной, потом удаляешь
DELETE FROM table1 WHERE field1 IN (value1, value2, ... , valueN)


Наверх

Титульная страница Поиск, карта сайта Написать письмо