SQL-Delete из таблицы на основе вложенного запроса - PullRequest
1 голос
/ 31 января 2012

У меня есть три таблицы в базе данных mySQL как таковые:

orders: order_sequence_number, contact_id, date_ordered ...

orderdetail: order_sequence_number ...

person: contact_id ...

Я пытаюсь удалить все строки в трех таблицах, у которых значение date_ordered старше двух лет, однако только поле date_orderedпоявляется в таблице заказов, но таблица имеет ссылки на два других через поля order_sequence_number и contact_id.

Итак, я бы изобразил это примерно так: ...

SELECT * FROM orders WHERE date_ordered BETWEEN X AND Y

Затем с этим набором записей

DELETE FROM orderdetail WHERE orderdetail.order_sequence_number IN (THE ABOVE)

и т. Д. Для таблицы лиц ... но безуспешно.

Мне кажется, что-то вроде вложенного подзапроса, но мне трудно понять, как это сделать.такой запрос, и я не могу понять его запутанную природу ...

Любые указатели будут очень признательны.

Ответы [ 3 ]

5 голосов
/ 31 января 2012
DELETE FROM orderdetail 
WHERE order_sequence_number IN 
(
    SELECT id 
    FROM orders 
    WHERE date_ordered BETWEEN X AND Y
)
2 голосов
/ 31 января 2012

Это почти то, что вы написали:

DELETE FROM orderdetail WHERE orderdetail.order_sequence_number IN (
    SELECT distinct(order_sequence_number) FROM orders WHERE date_ordered BETWEEN X AND Y
)
1 голос
/ 31 января 2012

Если у вас большой стол orders, лучше использовать EXISTS

DELETE FROM orderdetail od 
WHERE EXISTS ( SELECT NULL 
               FROM orders o 
               WHERE date_ordered BETWEEN X AND Y
                 and od.order_sequence_number = o.order_sequence_number
             )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...