Присоединение к удалению - PullRequest
0 голосов
/ 01 июня 2011

Я работаю с MySQL:

  • btableA имеет столбец tableB_id
  • в таблице B есть some_interestring_column_on_TableB

Я хочу (псевдо sql ниже):

delete from tableA 
 where the associated row in tableB (via tableB_id) has  
     some_interestring_column_on_TableB = 'interestingValue'

Пожалуйста, помогите мне перевести псевдо sql в реальный sql.

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

Попробуйте это:

 DELETE TableA
 WHERE tableB_id IN (
    SELECT id FROM TableB 
    WHERE  interestring_column='pizza');
2 голосов
/ 01 июня 2011

MySQL поддерживает JOIN в операторе DELETE, а также удаление из нескольких таблиц в одном операторе . Следующее удалит только из TABLEA:

DELETE ta
  FROM TABLEA ta
  JOIN TABLEB tb ON b.id = a.tableb_id
                AND b.col = 'some value'

Если вы хотите удалить из обеих таблиц, используйте:

DELETE ta, tb
  FROM TABLEA ta
  JOIN TABLEB tb ON b.id = a.tableb_id
                AND b.col = 'some value'

Тем не менее, эта поддержка очень редко встречается в других базах данных - вам придется использовать IN или EXISTS в большинстве случаев.

0 голосов
/ 01 июня 2011

Я не знаю синтаксис mysql, но я думаю что-то вроде (из mssql):

delete from tableA 
where tableA.tableB_id in 
   (select tableB.id from tableB 
   where tableB.some_interesting_column_on_TableB = 'interestingValue')
...