В чем разница между INNER и LEFT в выражении DELETE? - PullRequest
0 голосов
/ 25 апреля 2011

При выполнении удаления я могу сжать строки в двух или более таблицах, выполнив LEFT JOIN.

DELETE a, b FROM
table1 a
LEFT JOIN table2 b on (a.id = b.id)
WHERE ...

Я также могу сделать INNER JOIN

DELETE a, b FROM
table1 a
INNER JOIN table2 b on (a.id = b.id)
WHERE ...

Что точно есть разница между этими двумя?

А как насчет других объединений
Имеет ли смысл использовать другие типы объединений в операторе delete икак они могут быть полезны?

В чем разница между удалением ... объединением и использованием внешнего ключа
Если я задаю внешний ключ с помощью предложения ON DELETE CASCADE:

  1. Соответствует ли это соединению INNER или «ВЛЕВО» (или ничего из вышеперечисленного)?
  2. Это как-то «лучше» (быстрее / безопаснее), чем использование соединения?

Я использую MySQL, но мне также хотелось бы знать, какие другие базы данных его поддерживают.

1 Ответ

2 голосов
/ 25 апреля 2011

Разница в том, что внутреннее соединение не удаляет ничего, что не присоединяется. Левое объединение может удалить вещи, которые не объединяются, в зависимости от того, что указано в предложении WHERE.

...