删除名称未显示在列上的所有行

时间:2015-12-09 11:15:02

标签: sql sql-server tsql

我有两个SQL表如下:

mydate = If(dtReader.IsDBNull(dtReader.GetOrdinal("mydate")), _
          CType(Nothing,DateTime?), _
          dtReader.GetDateTime(dtReader.GetOrdinal("mydate")))

我需要删除其名称未显示在任何帖子的“内容”列中的所有文件...注意,该内容具有HTML代码,其中包含文件名称。

例如,如果在任何帖子的内容中找不到带create table dbo.Posts ( Id int identity not null, Content nvarchar (max) not null -- other columns ) create table dbo.Files ( Id int identity not null, Name nvarchar (200) not null -- other columns ) 的文件,则应将其删除。

更新

我尝试了一个Select来测试它,但不知怎的,这给了我所有文件,所以我不确定我错过了什么:

Name=hello-john

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

查找所有Files - 未引用的行:

SELECT * 
FROM Files f 
WHERE NOT EXISTS (
    SELECT 1 FROM Posts p WHERE p.content like '%' + f.name + '%');

删除所有这些:

DELETE
FROM Files
WHERE NOT EXISTS (
    SELECT 1 FROM Posts p WHERE p.content like '%' + Files.name + '%');

DELETE FROM Files where id in
(SELECT f.id 
FROM Files f 
WHERE NOT EXISTS (
    SELECT 1 FROM Posts p WHERE p.content like '%' + f.name + '%'));

可能会很慢,具体取决于行数。