当我想执行以下查询时:
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)
它应该是什么?
三江源。
编辑:
我想删除klantId 3。
答案 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
它会自动从klantGegevens
和orderGegevens
中删除相应的行。
有关添加约束的更多信息,请访问: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