SQL选择删除DIRECTLY

Nim*_*ral 2 sql sql-server select sql-delete

我需要选择记录,检查我的选择标准并加强它,直到我得到我需要的所有记录,然后删除(或以其他方式更改)那些.让我们暂时删除.

select <fields> from <database> where <condition>
Run Code Online (Sandbox Code Playgroud)

(检查,调整条件)

delete from <database> where (<same condition>)
Run Code Online (Sandbox Code Playgroud)

这里不是像管道那样更容易将选定的记录直接推送到删除语句中吗?我使用技术选择所有记录号到临时数据库,但是没有直接的方法吗?

我搜索了Stack Overflow,发现了一些问题,人们会问如何将select语句转换为delete语句,这不是我想要的.我的想法是这样的:

select ... from ... where ... | delete
Run Code Online (Sandbox Code Playgroud)

或者像这样的东西作为一种解决方法......

/* create a list of records to delete */
select ... from ... where ... into @temp

/* shove the list into delete */
delete @temp  
Run Code Online (Sandbox Code Playgroud)

SQL标准是否支持我想要的机制,或者是否有特定于平台的方法(MS SQL Server)?

Gio*_*sos 5

你可以使用a Common Table Expression,像这样:

;WITH CTE AS (
   select <fields>  
   from <table> 
   where <condition>
)
DELETE FROM CTE
Run Code Online (Sandbox Code Playgroud)

此语句将删除查询返回的所有记录.

您可以选择添加应用于CTE查询返回的内联表的额外条件,例如:

;WITH CTE AS (
   select <fields>  
   from <table> 
   where <condition>
)
DELETE FROM CTE 
WHERE <more conditions on CTE fields>
Run Code Online (Sandbox Code Playgroud)