可以用HAVING子句删除吗?

Abe*_*ler 34 sql sql-server sql-server-2008

我想做类似下面的事情:

DELETE UserPredictions
  GROUP BY UserId
  HAVING COUNT(*) < 500
Run Code Online (Sandbox Code Playgroud)

但是我收到了语法错误.甚至可以在SQL Server中使用HAVING子句进行删除,还是必须将计数滚动到CTE并使用连接执行删除?

Gor*_*off 49

并不是的.having子句意味着聚合,这意味着您不再拥有原始行.

我想你想要以下内容:

DELETE from UserPredictions
where UserId in (select UserId from UserPredictions group by UserId having count(*) < 500)
Run Code Online (Sandbox Code Playgroud)

  • 我得到你不能在 FROM 子句中为更新指定目标表“UserPredictions” (3认同)
  • @radtek。。。据推测,您使用的是MySQL,而不是SQL Server。 (2认同)

Zan*_*ien 21

您可以在DELETE语句中使用已连接的子选择:

DELETE a
FROM   UserPredictions a
JOIN
(
    SELECT   UserId
    FROM     UserPredictions
    GROUP BY UserId
    HAVING   COUNT(1) < 500
) b ON a.UserId = b.UserId
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示


vul*_*ven 11

试试这个嵌套查询:

DELETE FROM UserPredictions  
WHERE UserId IN (SELECT UserId
                 FROM UserPredictions 
                 GROUP BY UserId
                 HAVING COUNT(*) < 500)
Run Code Online (Sandbox Code Playgroud)