STO*_*ORM 4 sql t-sql sql-server sql-delete
我有一张桌子,叫做Document.
文件:
id int
docuid int
doc blob
Run Code Online (Sandbox Code Playgroud)
然后我有两个引用表
AppRequiredDocuments :
id int
appid int
docid int -> references document -> id
Run Code Online (Sandbox Code Playgroud)
应用文件:
id int
appid int
docid int -> references document -> id
Run Code Online (Sandbox Code Playgroud)
由于文档表中的一个非常旧的迁移孤立项目,必须引用其他表中的引用。如何仅删除AppDocuments或中未引用的文档表中的文档AppRequriedDocuments?
一种方法使用删除连接:
DELETE d
FROM Document d
LEFT JOIN AppRequiredDocuments t1
ON d.id = t1.docid
LEFT JOIN AppDocuments t2
ON d.id = t2.docid
WHERE t1.docid IS NULL AND
t2.docid IS NULL
Run Code Online (Sandbox Code Playgroud)
这里的逻辑是,如果给定的Document记录没有被两个辅助表中的任何内容引用,那么在连接的结果集中,docid这两个其他表的列都应该是NULL.
您可以使用NOT EXISTS以下方法查找并删除这些项目:
delete from document d
where not exists (select 1 from AppRequiredDocuments a where a.docid = d.id);
and not exists (select 1 from AppDocuments a where a.docid = d.id);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |