sql删除查询

时间:2015-05-29 18:07:57

标签: sql sql-server

当我想执行以下查询时:

DELETE 
   login,
   klantGegevens,
   orderGegevens
FROM login 
INNER JOIN klantGegevens ON login.klantid=klantGegevens.klantid 
INNER JOIN orderGegevens ON login.klantid=orderGegevens.loginNr 
WHERE login.klantId=3

我收到错误:

  

Msg 102,Level 15,State 1,Line 1   ','。

附近的语法不正确

显然“DELETE”和“INNER JOIN”之间有问题。 (DELETE 登录,klantGegevens,orderGegevens FROM login INNER JOIN)

它应该是什么?

三江源。

编辑:

enter image description here

我想删除klantId 3。

2 个答案:

答案 0 :(得分:4)

我不知道您尝试使用内部联接是否意味着您只想删除一条记录(如果它存在于所有3个表中)。

对于这个答案 - 假设你不关心(你只想在任何你找到的地方删除它):

CREATE PROC dbo.DeleteLotsOfStuff
(@id int)
AS

Begin

DELETE FROM login WHERE klantid = @id
DELETE FROM klantGegevens WHERE klantid = @id
DELETE FROM orderGegevens WHERE loginNr = @id

End
EXEC dbo.DeleteLotsOfStuff 3

或者 - 您可以将约束(主键/外键关系)添加到主表,然后将其设置为“DELETE CASCADE”。如果你这样做,那么每当你跑步时(例如):

DELETE FROM login WHERE klantid = @id

它会自动从klantGegevensorderGegevens中删除相应的行。

有关添加约束的更多信息,请访问:https://msdn.microsoft.com/en-us/library/ms188066.aspx

答案 1 :(得分:0)

试试这个语法

DELETE L
FROM   login L
       INNER JOIN klantGegevens
               ON L.klantid = klantGegevens.klantid
       INNER JOIN orderGegevens
               ON L.klantid = orderGegevens.loginNr
WHERE  L.klantId = 3