转换选择为删除

时间:2017-02-02 14:28:47

标签: sql sql-server sql-server-2008

我有这个SQL select语句,我需要用它来删除它找到的记录:

SELECT dbo.X_Files.FileID, dbo.X_Files.FileX, dbo.X_ApplyFiles.idPRJ
FROM             dbo.X_Files 
LEFT OUTER JOIN  dbo.X_ApplyFiles ON dbo.X_Files.FileID = dbo.X_ApplyFiles.FileID
WHERE  (dbo.X_ApplyFiles.idPRJ IS NULL) 
AND    (dbo.X_Files.FileX = @FileX)

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

在' delete':

之后指定表格名称
delete dbo.X_Files
FROM             dbo.X_Files
LEFT OUTER JOIN  dbo.X_ApplyFiles ON dbo.X_Files.FileID = dbo.X_ApplyFiles.FileID
WHERE  (dbo.X_ApplyFiles.idPRJ IS NULL) 
AND    (dbo.X_Files.FileX = @FileX)

答案 1 :(得分:2)

您可以使用CTE

轻松完成此操作
;With ToDelete As
(
    SELECT dbo.X_Files.*
    FROM             dbo.X_Files 
    LEFT OUTER JOIN  dbo.X_ApplyFiles ON dbo.X_Files.FileID = dbo.X_ApplyFiles.FileID
    WHERE  (dbo.X_ApplyFiles.idPRJ IS NULL) 
    AND    (dbo.X_Files.FileX = @FileX)
)
Delete  ToDelete

这也是轻松查看您所选记录的好方法:

;With ToDelete As
(
    SELECT dbo.X_Files.*
    FROM             dbo.X_Files 
    LEFT OUTER JOIN  dbo.X_ApplyFiles ON dbo.X_Files.FileID = dbo.X_ApplyFiles.FileID
    WHERE  (dbo.X_ApplyFiles.idPRJ IS NULL) 
    AND    (dbo.X_Files.FileX = @FileX)
)
Select    *
From      ToDelete

答案 2 :(得分:0)

您只需删除ID表中找不到dbo.X_ApplyFiles的记录

DELETE FROM dbo.X_Files
WHERE dbo.X_Files.FileID NOT IN (SELECT dbo.X_ApplyFiles.FileID FROM dbo.X_ApplyFiles)