2014-12-05 8 views
-1

я имею упрощенную таблицу, как это (table1):Удаление строк в таблице на основе значений в другой таблице

id | note 
---------------------------------- 
1 | some note 
2 | some note 
3 | another note 
4 | some note 

и еще один (table2):

id | note 
---------------------------------- 
1 | some note 
2 | another note 
3 | some note 
4 | another note 

на основе кода из table1 Я хочу удалить строки из таблицы2, где table1.note равно table2.note.

Если я предоставляю id3 таблицы tabel1, строки с идентификаторами 2 и 4 таблицы2 должны быть удалены.

Я пробовал:

DELETE FROM table2 
JOIN table1 WHERE id = ? 
WHERE table1.note = table2.note 

Но я получаю "ER_PARSE_ERROR".

Каков правильный синтаксис mysql?

ответ

1

вы можете сделать join между table1 и table2 в операторе delete.

DELETE T2 FROM Table2 T2 
JOIN Table1 T1 
ON T1.note = T2.note 
AND T1.id =3 
+0

Thx, это работает, не могли бы вы объяснить, что означает «T2» в первой строке? Их можно опустить? При поиске в Интернете я нахожу только примеры с простыми операциями «DELETE FROM table». То же самое касается T1. – Hans

+0

@ Указывает имя псевдонима, так что вам не нужно использовать полное имя таблицы для обозначения имени столбца, здесь столбец примечаний одинаковый в двух таблицах, поэтому вам нужно указать имя таблицы или имя псевдонима таблицы. – radar

+0

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

2

Вы можете написать запрос, как показано ниже вы можете указать WHERE пункт только один раз вместо того, чтобы использовать ON пункт, чтобы завершить присоединиться к части, или вы можете использовать AND после WHERE для более условий

DELETE t2.* 
FROM 
    table2 t2 
    JOIN table1 t1 
ON t1.note = t2.note 
WHERE t1.id = 3