I have a legacy query from years ago that was written for an MS Access backend:
DELETE category.*
FROM category
LEFT JOIN product_category ON category.id = product_category.categoryid
WHERE product_category.categoryid IS NULL
AND category.id IN
(SELECT cat.id
FROM category AS cat
LEFT JOIN category AS cat_par ON cat_par.category_parent = cat.id
WHERE cat_par.category_parent IS NULL
AND cat.category_parent != 0
AND cat.link IS NULL);
My system was changed to SQL Server and this query no longer runs.
I have tested the subquery (in the parenthesis) separately and that works as expected. Just no records are getting deleted.
I have tried changing the first two lines to read DELETE FROM category
(the only syntax difference I was able to look up) but still no deletion occurs.
Best Answer
I think Binaya Regmi is correct. When deleting in SQL-Server explicitly name the table you want to delete the rows from - especially necessary when using a join.
So in your case change the top row from
to