我的数据库中有两个表,分别称为Phases和Releases。第一个包含了外键Releases的Id命名ReleaseId。如果要删除Release,首先要检查其中是否有任何Phase内容(例如,Phases包含的Id中有任何列Release)。如果存在,则删除Phase,然后删除Release。否则,我只删除Release。
因此,我将用SQL Server编写的以下查询放在一起:
IF (SELECT * FROM Phases WHERE ReleaseId='2002') IS NOT NULL
BEGIN
DELETE FROM Phases WHERE ReleaseId='2002'
DELETE FROM Releases WHERE Id='2002'
END
ELSE
BEGIN
DELETE FROM Releases WHERE Id='2002'
END
但这给了我以下错误:
如果未使用EXISTS引入子查询,则只能在选择列表中指定一个表达式。
我对SQL非常不满意,因此无法解决此问题。怎么了?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
为什么不只在带有子句的phases(releaseId)引用上创建外键约束呢?它实现了您正在寻找的确切行为:releases(Id)on delete cascade
alter table phases
add constraint fk_phases_releases
foreign key (releaseId)
references releases(Id)
on delete cascade;
每当父记录被删除时,约束将自动删除子记录