【问题标题】:sql delete query [duplicate]sql删除查询[重复]
【发布时间】:2015-08-12 17:11:32
【问题描述】:

当我想执行以下查询时:

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

我得到错误:

消息 102,级别 15,状态 1,行 1 ',' 附近的语法不正确。

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

应该是什么?

谢谢。

编辑:

我想删除 klantId 3。

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我不知道您尝试使用内部联接是否意味着您只想删除所有 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

【讨论】:

    【解决方案2】:

    试试这个语法

    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 
    

    【讨论】:

    • 感谢您的回答,但我已经尝试过了,它并没有删除任何内容。
    • 样本数据和预期结果肯定会有所帮助。
    • 当然请看我的编辑^
    • @Jenssen - 在一个删除查询中不能删除多个表。您必须编写单独的删除查询来删除每个表
    • 在某种意义上删除表意味着只删除行。要从三个不同的表中删除一行,您需要编写三个不同的删除查询。
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2019-12-11
    • 2014-07-03
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多