Forum Webscript.Ru

Общие => Базы данных => Тема начата: Error202 от 03 Ноября 2005, 09:01:12

Название: Сравнение таблиц
Отправлено: Error202 от 03 Ноября 2005, 09:01:12
Господа! Есть 2 таблицы... В одной - данные TXT, URL, EMAIL и во второй тоже...

Внимание вопрос:
Как сделать оптимальнее сравнение, т.е. нужно смотреть вторую таблицу и если данные уже есть в первой, то удалять их из второй...?

P.S. В данный момент у меня идет перебор данных второй таблицы, в цикл вставляется еще запрос к 1 таблице на проверку и так для каждой записи...

Сейчас во второй таблице около 2000 записей и данный механизм уже не подходит...
Название: Сравнение таблиц
Отправлено: hanslinger от 03 Ноября 2005, 09:08:53
Что за СУБД?
Название: Сравнение таблиц
Отправлено: Error202 от 03 Ноября 2005, 09:20:04
:) MySQL
Название: Сравнение таблиц
Отправлено: hanslinger от 03 Ноября 2005, 09:46:28
С версии 4.1 поддерживаются вложенные запросы (подзапросы).
DELETE FROM ... WHERE ... IN (SELECT ....)
типа того
Название: Сравнение таблиц
Отправлено: Error202 от 03 Ноября 2005, 09:47:42
Да это было бы шоколодно... Жаль у хостера 4.0... :(
Название: Сравнение таблиц
Отправлено: commander от 03 Ноября 2005, 10:06:28
Error202
переложить подзапрос на плечи приложения...
Название: Сравнение таблиц
Отправлено: Error202 от 03 Ноября 2005, 10:14:22
commander
У меня так и сделано... Только это притормаживает слегка при больших объемах... (если я правильно тебя понял)
Название: Сравнение таблиц
Отправлено: commander от 03 Ноября 2005, 10:21:53
Error202
поподробнее опиши как ты делаешь сравнение?
Название: Сравнение таблиц
Отправлено: Error202 от 03 Ноября 2005, 10:44:41
У меня так (в общих чертах):


SELECT id1, url1, email1 FROM table2
{
  SELECT id2, url2 FROM table1 WHERE url2 = url1
  если есть id2, то DELETE FROM table2 WHERE id2

  SELECT id2, email2 FROM table1 WHERE email2 = email1
  если есть id2, то DELETE FROM table2 WHERE id2
}
Название: Сравнение таблиц
Отправлено: commander от 03 Ноября 2005, 12:53:40
Error202
SELECT url1, email1 FROM table1
{
my $id2 = ... SELECT id2 FROM table2 WHERE url2 = url1 OR email2 = email1;
DELETE FROM  table2 WHERE id2=$id2 if ($id2);
}

?
Название: Сравнение таблиц
Отправлено: Error202 от 03 Ноября 2005, 12:57:28
Ну да... Я там так... разбил для наглядности... Т.е. это единственный метод?
Название: Сравнение таблиц
Отправлено: commander от 03 Ноября 2005, 13:11:32
ИМХО
из простых да...
Название: Сравнение таблиц
Отправлено: fidget от 03 Ноября 2005, 15:32:49
читать мануал. multi-table delete:
http://dev.mysql.com/doc/refman/4.1/en/delete.html