Удаление из нескольких таблиц

WebByte

Проходящий мимо
Удаление из нескольких таблиц

Запрос
PHP:
DELETE groups, links FROM groups, links  WHERE groups.id=1 AND groups.id=links.gid
корректно выполняется, если есть записи в links с параметром gid=1. При этом удаляется запись из groups и соответсвующие записи из links.
Однако, если в links записей нет, то и из groups ничего не удаляется.

Как быть?
 

chira

Новичок
Код:
DELETE groups, links 
FROM groups 
  LEFT JOIN links ON groups.id=links.gid
WHERE groups.id=1
 

WebByte

Проходящий мимо
Спасибо. Помогло. Но тогда новый вопрос.
Какой способ предпочтительней? Оптимальней, быстрее итп.

PHP:
DELETE t1, ...,tN FROM t1
LEFT JOIN t2 ON t1.id=t2.id
...
LEFT JOIN tN ON tN-1.id=tN.id
WHERE t1.id=1
при этом.
t2, ... , tN (N<100) могут и не содержать ни одной записи, но могут содержать тысячи, соответствующих условию

или последовательное удаление
PHP:
DELETE FROM t1 WHERE ...
...
DELETE FROM tN WHERE ...
-~{}~ 22.08.04 02:17:

И сам себе ответ.
запрос
PHP:
DELETE groups, links, datas, stack, stoplist FROM groups
LEFT JOIN links ON groups.id=links.gid 
LEFT JOIN datas ON links.id=datas.lid 
LEFT JOIN stack ON links.site=stack.param
LEFT JOIN stoplist ON links.id=stoplist.lid
WHERE groups.id=1
При 30 000 записей на эти таблицы при наличие ключей
вешает сервер на ура.
 

chira

Новичок
сделай EXPLAIN для запроса, посмотри. как он выполняется сервером, может стоит попереставлять таблицы с LEFT JOIN.
 

WebByte

Проходящий мимо
Спасибо

-~{}~ 22.08.04 07:48:

Получилось, что оптимальнее разбить запрос на три...
 
Сверху