MYSQL - несколько DELETE JOIN или несколько DELETE по отдельности [дубликат]

Вы можете использовать рекурсию для выполнения проверки чека. Это имеет недостаток в создании фрейма стека для каждого элемента в вашем списке. Если ваш список длинный, это, безусловно, приведет к переполнению стека. LLVM оптимизирует метод Node::back в цикле (см. LLVM IR, сгенерированный на игровой площадке )

impl Node {
    fn back(&mut self) -> &mut Link {
        match self.next {
            Some(ref mut node) => node.back(),
            None => &mut self.next,
        }
    }
}

impl Recursive {
    fn back(&mut self) -> Option<&mut Link> {
        self.root.as_mut().map(|node| node.back())
    }
}

95
задан Sam 18 August 2014 в 10:51
поделиться

6 ответов

Используйте JOIN в инструкции DELETE.

DELETE p, pa
      FROM pets p
      JOIN pets_activities pa ON pa.id = p.pet_id
     WHERE p.order > :order
       AND p.pet_id = :pet_id

В качестве альтернативы вы можете использовать ...

DELETE pa
      FROM pets_activities pa
      JOIN pets p ON pa.id = p.pet_id
 WHERE p.order > :order
   AND p.pet_id = :pet_id

... для удаления только из pets_activities

См. http://dev.mysql.com/doc/refman/5.0/en/delete.html

Для удаления одной таблицы, но с ссылочная целостность, есть другие способы делать с EXISTS, НЕ СУЩЕСТВУЕТ, IN, NOT IN и т. д. Но выше, где вы указываете, из каких таблиц, которые нужно удалить с помощью псевдонима перед предложением FROM, может вытащить вас из нескольких довольно жестких пятна легче. Я имею тенденцию обращаться к EXISTS в 99% случаев, а затем есть 1%, где этот синтаксис MySQL занимает день.

171
ответ дан pkyeck 28 August 2018 в 00:29
поделиться

Синтаксис выглядит правильно для меня ... попробуйте изменить его, чтобы использовать INNER JOIN ...

Посмотрите на это: http://www.electrictoolbox.com/article / MySQL / кросс-таблицы удалить /

2
ответ дан Andre Gallo 28 August 2018 в 00:29
поделиться

У меня нет базы данных mysql для тестирования на данный момент, но попытались ли вы указать, что нужно удалить до предложения from? Например:

DELETE p, pa FROM `pets` p,
        `pets_activities` pa
  WHERE p.`order` > :order
    AND p.`pet_id` = :pet_id
    AND pa.`id` = p.`pet_id`

Я думаю, что используемый вами синтаксис ограничен более новыми версиями mysql.

2
ответ дан Brandon Horsley 28 August 2018 в 00:29
поделиться

Для всех, кто читает это в 2017 году, я сделал что-то подобное.

DELETE pets, pets_activities FROM pets inner join pets_activities
on pets_activities.id = pets.id WHERE pets.`order` > :order AND 
pets.`pet_id` = :pet_id

Как правило, для удаления строк из нескольких таблиц приведен следующий синтаксис. Решение основано на предположении, что между двумя таблицами существует некоторая взаимосвязь.

DELETE table1, table2 FROM table1 inner join table2 on table2.id = table1.id
WHERE [conditions]
1
ответ дан Kalesh Kaladharan 28 August 2018 в 00:29
поделиться

Поскольку это, по-видимому, простое отношение между родителями и дочерними элементами между pets и pets_activities, вам было бы лучше создать ограничение внешнего ключа с помощью удаления каскада.

Таким образом, когда pets удаляется, связанные с ней строки pets_activities также автоматически удаляются.

Затем ваш запрос становится простым:

delete from `pets`
    where `order` > :order
      and `pet_id` = :pet_id
17
ответ дан paxdiablo 28 August 2018 в 00:29
поделиться

Используйте это

DELETE FROM `articles`, `comments` 
USING `articles`,`comments` 
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4

или

DELETE `articles`, `comments` 
FROM `articles`, `comments` 
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4
12
ответ дан RN Kushwaha 28 August 2018 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: