Sql 如何从值中删除子表?
我有一个TableA,两个小TableA与TableA链接。它们都有表a的外键。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
如果我的表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无关,但提及数据库类型可能有用