Is it possible to delete from multiple tables in the same SQL statement?
cascading-deletes, delete-row, sql, sql-server
Solution
Nope, you'd need to run multiple statements.
Because you need to delete from two tables, consider creating a temp table of the matching ids:
SELECT U.Id INTO #RecordsToDelete
FROM Users U
JOIN LinkingTable J ON U.Id = J.U_Id
...
And then delete from each of the tables:
DELETE FROM Users
WHERE Id IN (SELECT Id FROM #RecordsToDelete)
DELETE FROM LinkingTable
WHERE Id IN (SELECT Id FROM #RecordsToDelete)
Problem
It's possible to delete using join statements to qualify the set to be deleted, such as the following: ``` DELETE J FROM Users U inner join LinkingTable J on U.id = J.U_id inner join Groups G on J.G_id = G.id WHERE G.Name = 'Whatever' and U.Name not in ('Exclude list') ``` However I'm interested in deleting both sides of the join criteria -- both the `LinkingTable` record and the User record on which it depends. I can't turn cascades on because my solution is Entity Framework code first and the bidirectional relationships make for multiple cascade paths. Ideally, I'd like something like: ``` DELETE J, U FROM Users U inner join LinkingTable J on U.id = J.U_id ... ``` Syntactically this doesn't work out, but I'm curious if something like this is possible?