多表记录删除查询SQL Server中的语法错误

时间:2018-05-05 09:10:40

标签: sql sql-server

我正在使用SQL Server数据库。我想使用id在单个查询中删除多个表记录。

但我得到了

  

语法错误','

错误

我知道我的查询可能有误。我需要一个正确的查询或解决方案。

我有4个表:ProductsProductVideosPicturesInventory。我需要在一个查询中删除同一产品ID中的所有记录。

我的查询是:

DELETE FROM Products, ProductVideos, Pictures, Inventory 
USING Products 
INNER JOIN ProductVideos 
INNER JOIN Pictures 
INNER JOIN Inventory 
WHERE Products.Id = ProductVideos.ProductId 
  AND ProductVideos.ProductId = Pictures.ProductId 
  AND Pictures.ProductId = Inventory.ProductId 
  AND Products.Id = 1

2 个答案:

答案 0 :(得分:1)

你的问题是错的。

我认为你应该使用这个解决方案:

delete from [dbo].[Inventory] 
where ProductID in (select Id from Products where Id = 1)

delete from [dbo].[Pictures] 
where ProductID in (select Id from Products where Id = 1)

delete from [dbo].[ProductVideos] 
where ProductID in (select Id from Products where Id = 1)

delete from [dbo].[Products] 
where Id = 1

答案 1 :(得分:0)

您无法在SQL Server中的单个查询中删除多个表格的数据。 您必须逐个删除每个表中的数据。

DECLARE @id INT
SET @id = 1

DELETE I 
FROM Products P
INNER JOIN ProductVideos PV ON P.Id = PV.ProductId
INNER JOIN Pictures PC ON PC.ProductID = PV.ID
INNER JOIN Inventory I ON I.ProductId = PC.ProductId
WHERE P.Id = @id

DELETE PC 
FROM Products P
INNER JOIN ProductVideos PV ON P.Id = PV.ProductId
INNER JOIN Pictures PC ON PC.ProductID = PV.ID
WHERE P.Id = @id

DELETE PV 
FROM Products P
INNER JOIN ProductVideos PV ON P.Id = PV.ProductId
WHERE P.Id = @id

DELETE P 
FROM Products P
WHERE P.Id = @id

虽然删除它非常重要,但要记住表的顺序,如果在查询中使用TRANSACTION,则会更好。

相关问题