2013-08-20 3 views
0

Я хочу удалить некоторые записи из таблицы на основе критериев в другой таблице. Как удалить из одной из этих таблиц без удаления записей в обеих таблицах?Удалить строки из нескольких таблиц в базе данных

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

DELETE DeletingFromTable 
FROM DeletingFromTable 
     INNER JOIN CriteriaTable ON DeletingFromTable.field_id = CriteriaTable.id 
WHERE CriteriaTable.criteria = "value" ; 
+1

ли вы имеете в виду удаление таблицы (DROP) или значения в них? –

+0

Возможный дубликат [Как удалить список таблиц SQL Server, игнорируя ограничения?] (Http://stackoverflow.com/questions/1720755/how-to-drop-a-list-of-sql-server-tables- игнорирование-ограничения) – dazedandconfused

+0

Возможно, вам стоит взглянуть на это. Ваш вопрос - возможный дубликат [SQL Server: каскадный эквивалент таблицы?] (Http://stackoverflow.com/questions/4858488/sql-server-drop-table-cascade-equivalent) –

ответ

1

Это должно работать:

DELETE DeleteFromTable FROM DeleteFromTable AS DT 
JOIN CriteriaFromTable AS CT ON DT.SomeId = CT.SomeId 
WHERE CT.SomeId=[value] 
1

Ваш вопрос не 100% ясно, что ваш вопрос, но этот запрос будет удалять таблицы 1,2 и 3 одновременно:

DROP TABLE table1,table2,table3 
+1

Если у него нет зависимостей между таблицами, тогда он будет работать. В противном случае он сначала должен отбросить зависимости (первичные ключи, внешние ключи), а затем удалить таблицы. –

+0

Посмотрев на редактирование его вопроса, на самом деле это не то, что он хочет сделать в любом случае, но да, я должен был упомянуть о снижении ограничений перед удалением таблиц. – steoleary

1

Вы можете только удалить данные из одного таблица за раз.

Чтобы удалить из нескольких таблиц Записи нескольких запросов, разделенных точкой с запятой и выполнить его в унции, как

delete from table1; 
delete from table2; 
delete from table3; 

Или вы можете написать процедуру для выполнения этой задачи.

Пожалуйста, проверьте эту нить, а Drop multiple tables in one shot in mysql

+0

Возможно, вы захотите обернуть все удаленные транзакции Begin и Commit –

0

Вы можете просто написать запрос в DROP таблицы следующим образом:

DROP TABLE [TABLE_1] 
DROP TABLE [TABLE_2] 
DROP TABLE [TABLE_3] 

В зависимости от таблиц и каких-либо ограничений, вы можете иметь между ними, вы потребуется DROP таблицы в правильном порядке.

Если вы щелкните правой кнопкой мыши по любой таблице (в зависимости от версии SQL), вы должны иметь возможность «Просмотр зависимостей». Если 3 таблицы, которые вы планируете использовать DROP, зависят только друг от друга, сначала необходимо, чтобы во избежание сбоев вам не нужно было устанавливать таблицы без дочерних зависимостей.

Например, если вы попытаетесь удалить родительскую таблицу, где первичный ключ указан в дочерней таблице в качестве внешнего ключа, из-за этого произойдет ошибка DROP. Поэтому сначала удалите дочернюю таблицу с помощью внешнего ключа, после чего вы получите DROP родительскую таблицу.

Если, однако, таблицы имеют другие зависимости вне таблиц, которые вы удаляете, вам нужно будет удалить зависимости до того, как это будет работать.

0

Вы можете использовать:

DELETE FROM TableName 

Какие будут удалены все данные, но если у вас есть какие-либо сеяных столбцы, они не будут сброшены. Если вы хотите удалить данные и сбросить посевом PK, а затем использовать TRUNCATE ...

TRUNCATE TABLE TableName 

Но, вы должны рассмотреть, есть ли у вас другие таблицы, которые имеют referential integrity, если это так, то увидеть этот пост здесь SQL Server: How to ignore referential integrity until COMMIT?

EDIT:

Ваш комментарий выше ...

удалить такой запрос DELETE FROM table_name WHERE some_column = some_value;

... предполагает, что вы хотите удалить определенные строки?