Я хотел написать запрос для удаления из таблицы x и таблицы y, где object id = "123", выбирая идентификатор объекта из таблицы z для данного имени в таблице z.Как написать sql-запрос для этого ?формирование запроса
Пожалуйста, дайте мне знать.
Я хотел написать запрос для удаления из таблицы x и таблицы y, где object id = "123", выбирая идентификатор объекта из таблицы z для данного имени в таблице z.Как написать sql-запрос для этого ?формирование запроса
Пожалуйста, дайте мне знать.
Вы не можете удалить из двух таблиц одновременно. Вам нужно два оператора 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
только в случае, если у вас есть несколько объектов с одинаковыми именами. Вы можете изменить это поведение в соответствии с вашими потребностями.
Я хочу удалить из обеих таблиц X и Y за один раз – harqs
@harqs - 'Вы не можете удалить сразу из двух таблиц.« Это солидный факт. Вы можете использовать транзакции вокруг вышеприведенного кода, чтобы он «казался» таким образом, но просто * не может быть * выполнен как единый оператор. – MatBailie
я выступаю, как это для выбора, но не знают, как изменить это для удаления <выберите ид = «а» 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
Попробуйте это ..
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
.
может у пожалуйста, объясните этот запрос – harqs
Здесь 't1' и' t2' являются псевдонимами вашей таблицы 'x' и' y'. Этот запрос выбирает 'object_id' из' z' таблицы в соответствии с вашим желаемым именем и удаляет уважаемые строки с помощью их псевдонима ('t1 и t2') из таблицы' x и y'. – manurajhada
Как я могу использовать этот запрос в форме синтаксиса mybatis delete? – harqs
Удалить из разных таблиц в одном пакете (пуле) - это синхронный процесс, то есть он выполняется один за другим, поэтому вам нужно написать 2 разных запроса для удаления любых данных в соответствии с вашими требованиями.
Предполагая, что есть только 1 данные для данного имени
УДАЛИТЬ Х
ГДЕ object_id = object_id ИЗ Z, где имя = 'имя'
DELETE у
ГДЕ object_id = object_id ОТ г где имя = 'имя'
это дает лучшую производительность, затем «IN»
Ну Offcourse если у вас есть несколько записей для одного имени, то вы должны использовать «IN»
Вы еще что-то пробовали? –
Мне не удалось сформировать этот запрос. – harqs
К итогу голосования: Я согласен с тем, что вопрос освещен в деталях, но он, безусловно, не будет «запрашивать обсуждения, аргументы, опрос или расширенное обсуждение». – MatBailie