Sql 如何从值中删除子表?

Sql 如何从值中删除子表?,sql,Sql,我有一个TableA,两个小TableA与TableA链接。它们都有表a的外键。 如果我的表A是: TableA ------ idA Name 我的子表是: ChildTableA ----------- IdChildTable numA name 我想删除我的2个SmallTableA中与TableA中TableA.name=@name中的行对应的所有记录 我这样试过: DELETE FROM ChildTableA1 WHERE EXISTS (SELECT ChildT

我有一个TableA,两个小TableA与TableA链接。它们都有表a的外键。
如果我的表A是:

TableA
------
idA
Name
我的子表是:

ChildTableA
-----------
IdChildTable
numA
name
我想删除我的2个SmallTableA中与TableA
中TableA.name=@name
中的行对应的所有记录

我这样试过:

DELETE FROM ChildTableA1
WHERE EXISTS
      (SELECT ChildTableA1.*
          FROM ChildTableA1 INNER JOIN TableA ON ChildTableA.numA = TableA.idA
          WHERE (TableA.name = @name))
问题是它会从ChildTable1中删除所有行,就像我这样做:

Delete * from ChildTableA1.

是否有一种方法可以一次性从ChildTableA1和ChildTableA2中删除,但只能删除符合条件的行?

您的
delete
确实会删除所有内容,因为查询意味着“如果存在,则从该表中删除行”,并且
exists
为true,所有行都会被删除。您需要将
WHERE
条件指定给实际的
DELETE

DELETE FROM ChildTableA1
  WHERE numA IN (SELECT idA FROM TableA
    WHERE TableA.name = @name);
通过这种方式,检查每一行是否与表A中的行匹配

如果要同时从两个表中删除,则不可能,除非它们之间有一个外键,并且为约束设置了
CASCADE delete
。如果链接表存在
级联删除
,只需执行以下操作

DELETE FROM TableA WHERE name = @name;

还将导致删除其他表中的引用行。

您确实需要澄清“from ChildTableA1和ChildTableA1”的结构(加上这两个名称在我看来是相同的,不确定您的意思)。这与C#或Visual Studio无关,但提及数据库类型可能有用