Свифт не знает, может ли == 2
работать с dict["u"]
. Вы знаете, что dict["u"]
- это Int, но Swift этого не знает, потому что, вводя эти словари как NSMutableDictionary, вы скрывали типы значений.
Чтобы это исправить, измените [NSMutableDictionary]
на [[String:Int]]
.
You can take advantage of the "deleted" pseudo table in this example. Something like:
begin transaction;
declare @deletedIds table ( id int );
delete from t1
output deleted.id into @deletedIds
from table1 as t1
inner join table2 as t2
on t2.id = t1.id
inner join table3 as t3
on t3.id = t2.id;
delete from t2
from table2 as t2
inner join @deletedIds as d
on d.id = t2.id;
delete from t3
from table3 as t3 ...
commit transaction;
Obviously you can do an 'output deleted.' on the second delete as well, if you needed something to join on for the third table.
As a side note, you can also do inserted.* on an insert statement, and both inserted.* and deleted.* on an update statement.
EDIT: Also, have you considered adding a trigger on table1 to delete from table2 + 3? You'll be inside of an implicit transaction, and will also have the "inserted." and "deleted." pseudo-tables available.
Вы всегда можете настроить каскадное удаление в связях таблиц.
Вы можете инкапсулировать несколько удалений в одной хранимой процедуре.
Вы можете использовать транзакцию для обеспечения одного блока работы.
Вы можете использовать синтаксис JOIN в предложении FROM в DELETE в SQL Server, но вы все равно удаляете только из первой таблицы, и это собственное расширение Transact-SQL, которое является альтернативой подзапросу.
Из примера здесь :
-- Transact-SQL extension
DELETE
FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh INNER JOIN
Sales.SalesPerson AS sp ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;
Just wondering.. is that really possible in MySQL? it will delete t1 and t2? or I just misunderstood the question.
But if you just want to delete table1 with multiple join conditions, just don't alias the table you want to delete
this:
DELETE t1,t2
FROM table1 AS t1
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...
should be written like this to work in MSSQL:
DELETE table1
FROM table1
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...
to contrast how the other two common RDBMS do a delete operation:
http://mssql-to-postgresql.blogspot.com/2007/12/deleting-duplicates-in-postgresql-ms.html
По сути, нет необходимости делать три оператора удаления в транзакции, сначала дочерние, а затем родительские. Настройка каскадного удаления - хорошая идея, если это не одноразовая вещь и ее существование выиграло.
In SQL server there is no way to delete multiple tables using join. So you have to delete from child first before delete form parent.
Как уже указывал Аарон, вы можете установить поведение удаления в CASCADE, и это будет удалять дочерние записи при удалении родительской записи. Если вы не хотите, чтобы случилась какая-то другая магия (в этом случае пункты 2, 3 ответа Аарона были бы полезны), я не понимаю, зачем вам нужно удалять с помощью внутренних объединений.
Все уже было указано. Просто используйте либо DELETE ON CASCADE
на родительской таблице
, либо удаление из дочерней таблицы
в родительскую
.