2012-06-14 3 views
0

Я хотел написать запрос для удаления из таблицы x и таблицы y, где object id = "123", выбирая идентификатор объекта из таблицы z для данного имени в таблице z.Как написать sql-запрос для этого ?формирование запроса

Пожалуйста, дайте мне знать.

+0

Вы еще что-то пробовали? –

+0

Мне не удалось сформировать этот запрос. – harqs

+1

К итогу голосования: Я согласен с тем, что вопрос освещен в деталях, но он, безусловно, не будет «запрашивать обсуждения, аргументы, опрос или расширенное обсуждение». – MatBailie

ответ

3

Вы не можете удалить из двух таблиц одновременно. Вам нужно два оператора delete.

DELETE 
    x 
WHERE 
    object_id IN (SELECT object_id FROM z WHERE name = 'whatever') 

DELETE 
    y 
WHERE 
    object_id IN (SELECT object_id FROM z WHERE name = 'whatever') 

Я использовал IN только в случае, если у вас есть несколько объектов с одинаковыми именами. Вы можете изменить это поведение в соответствии с вашими потребностями.

+0

Я хочу удалить из обеих таблиц X и Y за один раз – harqs

+1

@harqs - 'Вы не можете удалить сразу из двух таблиц.« Это солидный факт. Вы можете использовать транзакции вокруг вышеприведенного кода, чтобы он «казался» таким образом, но просто * не может быть * выполнен как единый оператор. – MatBailie

+0

я выступаю, как это для выбора, но не знают, как изменить это для удаления <выберите ид = «а» ParameterType = «карта» \t \t statementType = «отзывной» resultMap = «МАП»> \t \t выберите objProp.actual_object_id , \t \t objProp.is_shared \t \t из t_object objProp \t \t где objProp.actual_object_id = \t \t # {} domainObject.id \t – harqs

3

Попробуйте это ..

delete t1,t2 from x t1 inner join y t2 on t1.id=t2.id where t1.id in 
(SELECT object_id FROM z WHERE name = 'YourName'); 

Проверено на Mysql.

+0

может у пожалуйста, объясните этот запрос – harqs

+0

Здесь 't1' и' t2' являются псевдонимами вашей таблицы 'x' и' y'. Этот запрос выбирает 'object_id' из' z' таблицы в соответствии с вашим желаемым именем и удаляет уважаемые строки с помощью их псевдонима ('t1 и t2') из таблицы' x и y'. – manurajhada

+0

Как я могу использовать этот запрос в форме синтаксиса mybatis delete? – harqs

0

Удалить из разных таблиц в одном пакете (пуле) - это синхронный процесс, то есть он выполняется один за другим, поэтому вам нужно написать 2 разных запроса для удаления любых данных в соответствии с вашими требованиями.

Предполагая, что есть только 1 данные для данного имени
УДАЛИТЬ Х
ГДЕ object_id = object_id ИЗ Z, где имя = 'имя'
DELETE у
ГДЕ object_id = object_id ОТ г где имя = 'имя'

это дает лучшую производительность, затем «IN»

Ну Offcourse если у вас есть несколько записей для одного имени, то вы должны использовать «IN»

Смежные вопросы