mySQL子查询限制

And*_*dez 51 mysql

这可能是一个简单的...我怎么能用这个查询实现我想要的:

delete from posts where id not in
(SELECT id FROM posts order by timestamp desc limit 0, 15)
Run Code Online (Sandbox Code Playgroud)

所以,简而言之,我想删除最新的15个帖子.

当我尝试该查询时,我明白了

MySQL还不支持'LIMIT&IN/ALL/ANY/SOME子查询

编辑

mySQL Server version: 5.5.8
mySQL Client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $
Run Code Online (Sandbox Code Playgroud)

错误:#1235 - 此版本的MySQL尚不支持'LIMIT&IN/ALL/ANY/SOME子查询'

Nic*_*ssu 151

试试这个:

DELETE 
FROM posts 
WHERE id not in (
      SELECT * FROM (
            SELECT id 
            FROM posts 
            ORDER BY timestamp desc limit 0, 15
      ) 
      as t);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.这种做法有点荒谬,但我很高兴. (7认同)
  • 我真的很好奇MySQL不能支持OP描述的原始方式的原因......这是一个奇怪的限制. (5认同)
  • 没有解释. (5认同)
  • 当子查询不起作用但子子查询有效时,这很有趣.谢天谢地!!!! (5认同)
  • 我不明白为什么这个有效,因为没有任何解释. (4认同)
  • 只有一个奇怪的细节:当您使用 IN 或 NOT IN 测试结果时,子查询中的 LIMIT 不起作用。如果你知道你只会得到一个结果(所以是一个 LIMIT 1 的子查询),你可以做到。只需使用“=”而不是“IN”就可以了。 (2认同)

Ert*_*maz 9

你可以试试这个:

DELETE 
    p1.* 
FROM 
    posts p1 INNER JOIN 
    (SELECT 
            id 
    FROM 
            posts 
            ORDER BY timestamp DESC 
            LIMIT 0, 15
    ) AS p2 
ON p1.id = p2.id;
Run Code Online (Sandbox Code Playgroud)