使用外键从多个表中删除SQL

mid*_*pat 4 sql t-sql sql-server-2008

我有2个表,通过外键,字段连接UploadID.

我想从数据库中删除一些行.我尝试了几个不起作用的SQL查询.

现在我有一个我认为应该做的技巧,但是得到了错误:

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

DELETE 
  a, b FROM [Uploads] as a, 
  [OrderLines] as b 
  WHERE [Uploads].UploadID < 53436;
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

SQL*_*ace 6

您只能在SQL Server中一次从1个表中删除

但是,如果您设置了密钥,cascade delete那么如果从父表中删除它们,则它们将从子表中自动删除

否则你需要运行两个delete语句,第一个用于子行,然后一个用于父行

这样的事......但我很困惑...... 你的JOIN条件在哪里?

DELETE 
  b FROM [Uploads] as a, 
  [OrderLines] as b 
  WHERE [Uploads].UploadID < 53436;

DELETE 
  [Uploads] 
  WHERE [Uploads].UploadID < 53436;
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用ANSI JOIN的新样式.如下所示

DELETE 
  b FROM [Uploads] as a, 
  JOIN [OrderLines] as b on A.SomeColumns = b.SomeColumn
  WHERE a.UploadID < 53436;
Run Code Online (Sandbox Code Playgroud)

你几乎有笛卡尔积(交叉连接)