logo

MySQL DELETE JOIN

Заявката DELETE е подчаст от езика за манипулиране на данни, използван за премахване на редове от таблици. Как да изтриете присъединяване MySQL е много популярен въпрос по време на интервютата. Не е лесен процес за използване на операторите за изтриване на присъединяване в MySQL. В този раздел ще опишем как можете да изтриете записи от множество таблици с помощта на INNER JOIN или LEFT JOIN в заявката DELETE.

DELETE JOIN с INNER JOIN

Заявката за вътрешно присъединяване може да се използва със заявка за изтриване за премахване на редове от една таблица и съответстващите редове от другата таблица, които отговарят на определеното условие.

Синтаксис

Следва синтаксисът, който може да се използва за изтриване на редове от повече от една таблица с помощта на Inner Join.

 DELETE target table FROM table1 INNER JOIN table2 ON table1.joining_column= table2.joining_column WHERE condition 

Тук целта е име на таблица, откъдето искаме да изтрием редове, като отговаряме на определеното условие. Да предположим, че искате да изтриете редове от таблицата Т1 и Т2 където student_id = 2 , то може да се запише като следното твърдение:

преобразуване на низ в дата
 DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.student_id=T2.student.id WHERE T1.student_id=2; 

В горния синтаксис целевата таблица (T1 и T2) е написана между ключовите думи DELETE и FROM. Ако пропуснем някое име на таблица от там, тогава изтриване на изявление премахва само редове от една таблица. Изразът, написан с НА ключова дума е условието, което съответства на редовете в таблиците, където ще изтриете.

Пример

Да предположим, че имаме две таблици студенти и Контакти който съдържа следните данни:

Маса: ученици

MySQL DELETE JOIN

Таблица: контакти

MySQL DELETE JOIN

Изпълнете следната заявка, за да разберете Изтриване на присъединяване с вътрешно присъединяване. Този оператор изтрива ред, който има същия идентификатор и в двете таблици.

 DELETE students, contacts FROM students INNER JOIN contacts ON students.student_id=contacts.college_id WHERE students.student_id = 4; 

След успешно изпълнение, той ще даде следното съобщение:

myflixer
MySQL DELETE JOIN

Сега изпълнете следната заявка, за да проверите успешно изтритите редове.

 mysql> SELECT * FROM students; mysql> SELECT * FROM contacts; 

Можете да видите, че редовете, където student_id=4 се изтрива.

MySQL DELETE JOIN MySQL DELETE JOIN

DELETE JOIN с LEFT JOIN

Вече научихме клаузата LEFT JOIN с израза SELECT, която връща всички редове от лявата (първата) таблица и съответстващите или несъвпадащите редове от друга таблица. По подобен начин можем да използваме клаузата LEFT JOIN с ключовата дума DELETE за изтриване на редове от лявата (първата) таблица, която няма съвпадащи редове от дясна (втора) таблица.

Следната заявка обяснява по-ясно къде операторът DELETE използва LEFT JOIN за изтриване на редове от Маса 1 който няма съвпадащи редове в Таблица 2 :

 DELETE Table1 FROM Table1 LEFT JOIN Table2 ON Table1.key = Table2.key WHERE Table2.key IS NULL; 

В горната заявка забележете, че ще използваме само Table1 с ключовата дума DELETE, а не и двете, както беше в оператора INNER JOIN.

Пример

Нека създадем таблица ' Контакти ' и ' клиенти ' в база данни, която съдържа следните данни:

Таблица: контакти

plsql
MySQL DELETE JOIN

Маса: клиенти

MySQL DELETE JOIN

Изпълнете следния оператор, който премахва клиента, който няма a мобилен телефон номер:

 DELETE customers FROM customers LEFT JOIN contacts ON customers.customer_id = contacts.contact_id WHERE cellphone IS NULL; 

След успешно изпълнение, той ще даде следното съобщение:

MySQL DELETE JOIN

Сега изпълнете следната заявка, за да проверите успешно изтритите редове.

 mysql> SELECT * FROM customers; 

Можете да видите, че редовете, в които клиентът няма номера на мобилния телефон, са изтрити.

MySQL DELETE JOIN