2017-01-11 40 views
-2

我有三个表删除多个表中的行与外键

  1. userTable与以下行IdFirstNameLastNameEmail
  2. Product A与以下行IdUserId(FK),startDate
  3. Product D以下行Id,UserId(FK),startDate

我想从具有特定UserId的三个表中删除行。

我想达到的目标 -

  1. 查找指定的电子邮件(select id from userTable where Email = 'abc.com')的ID - 回来ID - 3

  2. Delete from Product A where id = 3

  3. Delete from Product D where id = 3

  4. Delete from userTable where id = 3

我想创建一个脚本。

任何帮助表示赞赏或学习参考将是伟大的。

+0

如果我理解正确(如果我没有理解,我会变得麻木),产品A/D中的UserId在表userTable中是FK到Id,对吧? –

+0

@LudvigRydahl这是正确的! – GeekOnGadgets

回答

1

声明一个变量并将id保存到该变量。将Id用于删除查询。

DECLARE @Id INT; 

SELECT @Id=id 
FROM userTable 
WHERE Email = 'abc.com' 

DELETE FROM Product A WHERE id = @Id 
DELETE FROM Product D WHERE id = @Id 
DELETE FROM userTable WHERE id = @Id 

但我想你的情况,你有UserId为FK所以你应该尝试这样的:

DELETE FROM Product A WHERE UserId= @Id 
DELETE FROM Product D WHERE UserId= @Id 
DELETE FROM userTable WHERE id = @Id 

注:如果你想要做什么是有问题的同样的事情,去第一个。如果要从AD表中删除相关的用户记录,则转到使用FK删除记录的第二种方法。

0

从我可以从你的问题收集你想要的东西是这样的:

DELETE FROM 
    userTable, 
    ProductA, 
    ProductB 
WHERE 
    userTable.Id = (select Id from userTable where Email like 'abc.com') AND 
    userTable.Id = ProductA.Id AND 
    userTable.Id = ProductB.Id; 

而在WHERE子句中的子查询中的电子邮件将是你的输入参数

免责声明:从Sybase/SQL Anywhere背景下,这将是可能的,我不确定它是否可以在SQL服务器中完成。