2009-11-20 1 views
4

Я хочу удалить определенные элементы из базы данных. У меня есть следующий запрос:Как превратить этот запрос MySQL SELECT в запрос DELETE?

SELECT * 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

Это работает и возвращает 2 результата.

Теперь я хочу повернуть этот запрос SELECT в запрос DELETE. Однако, следующее не работает:

DELETE FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

MySQL выдает следующее сообщение об ошибке:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE entries.sheetID = sheets.id AND sheets.clientID = 13' at line 1

Что я делаю неправильно здесь?

+0

Вы пытаетесь удалить строки из листов, из записей или из обоих? – Andomar

+0

Andomar: Я хочу удалить все листы и записи листа из клиента 13. Я бы предпочел не использовать более одного запроса, если это действительно не нужно. –

ответ

10

MySQL 4 и выше поддерживает deleting from multiple tables at once, используя следующий синтаксис:

DELETE sheets, entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

Если вы используете MySQL ниже версии 4, вам нужно удалить строки из одного стола за раз, и вы можете использовать одно из других решений, размещенных здесь.

0

Вы можете попробовать что-то вроде этого

DELETE FROM sheets 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

, если вы хотите удалить из листов и

DELETE FROM entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

, если его из записей

+0

Проблема в том, что я хочу удалить из обоих одновременно. Я хочу удалить все листы и записи листа из клиента 13. Я бы предпочел не использовать более одного запроса, если это действительно не нужно. –

0

Я считаю, что вы можете только DELETE из одной таблицы время.

DELETE FROM entries 
WHERE entries.sheetID IN 
(SELECT ID FROM sheets WHERE clientID = 13) 

DELETE FROM sheets 
WHERE sheets.clientID = 13 
+1

MySQL фактически позволяет удалять несколько таблиц http://dev.mysql.com/doc/refman/5.0/en/delete.html – Andomar

+0

Спасибо Andomar, каждый день - школьный день! –

2

попробовать

DELETE sheets, entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

Я гугле SQL удалить из 2 таблиц сразу и нашел this forum post

+0

Еще один правильный, но немного менее документированный ответ :) Спасибо! –

0

Вы можете удалить только из таблицы за один раз. Если вы хотите водить автомобиль и удаляет из того же самого запроса, вы можете сделать что-то вроде следующего:

DELETE from sheets where id in (
SELECT sheets.id 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13); 
DELETE from entries where id in (
SELECT entries.id 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13); 
+0

Вторая неудача, поскольку вы уже удалили строки таблицы соединений –

+0

Это, по-видимому, неверно в MySQL, который, как указано в других ответах, поддерживает оператор DELETE, который пытается создать OP (с немного отличающимся синтаксисом). –

2

MySQL позволит вам удалить больше присоединиться, но вы должны указать, какие столбцы, поэтому используя ваш пример, правильный синтаксис будет

 
DELETE sheets.*, entries.* FROM sheets, entries WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 
Смежные вопросы