同一张表的嵌套查询

Posted

技术标签:

【中文标题】同一张表的嵌套查询【英文标题】:nested query on the same table 【发布时间】:2013-07-13 23:12:07 【问题描述】:

您认为这样的查询会在执行我的软件时产生问题吗? 我需要删除所有表,除了最后2组条目,按插入的同一时间分组。

delete from tableA WHERE time not in
                (
                  SELECT time FROM
                  (select distinct time from tableA order by time desc limit 2 
                  ) AS tmptable
                );

你有更好的解决方案吗?我正在使用 mysql 5.5

【问题讨论】:

【参考方案1】:

我没有发现您的查询有任何问题,但我更喜欢使用 OUTER JOIN/NULL 检查(另外它减少了对嵌套子查询之一的需求):

delete a
from tableA a 
  left join 
  (
      select distinct time 
      from tableA 
      order by time desc 
      limit 2 
  ) b on a.time = b.time
where b.time is null
SQL Fiddle Demo

【讨论】:

以上是关于同一张表的嵌套查询的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis关联查询(嵌套查询)

oracle嵌套where查询

oracle如何查询嵌套表的分项

MySQL数据库实验四:嵌套查询

如何在查询中取消嵌套嵌套表的集合?

嵌套表的最佳查询语法?