举例如下:
id name
1 aaaa
2 bbb
3 ccc
4 ddd
5 eee
7 fff
12 ggg
13 xx
15 eee在这个表里,我想查询"以id倒序排列的前5条记录录"里是否有一条 name='eee'的记录,请高手指导一下。
具体讲就是 在
select * from `tab` order by `id` desc limit 5
的结果里,查询`name`='eee'的记录
使用一条语句里查询

解决方案 »

  1.   

    select * from `tab` where name ='eee' order by `id` desc limit 5
      

  2.   

    select * from (select * from `tab` order by `id` desc limit 5
    ) a  where name ='eee';
      

  3.   

    这个语句不行的。可能是我刚才写的不够清楚。
    我想查询"以id倒序排列的前5条记录录"里是否有一条 name='aaa'的记录
    "以id倒序排列的前5条记录录"就是
    15 eee
    13 xx
    12 ggg
    7 fff
    5 eee我只要在这5条记录里查询
    这里没有name='aaa'的记录
    但是
    select * from `tab` where name ='aaa' order by `id` desc limit 5
    会把第一条记录
    1 aaaa
    查出来
      

  4.   

    select * from (select * from 这个表 order by id desc limit 5) t where  name='eee'
      

  5.   

    听说mysql的子查询效率不是很高,还能不能用其它的查询进行呢?
      

  6.   

    select t.id,name from tab t INNER JOIN (select id from `tab` order by `id` desc limit 5
    ) a ON a.id=t.id where name ='eee';
      

  7.   

    不是子查询的效率不高,而是一般选手容易在子查询中用 select * 等使子查询要处理大量的临时数据,在这个时候,如果tmp_table_size、sort_buffer_size、read_buffer_size等参数值过低时,就造成频繁地读写硬盘,因而就得出一个‘子查询效率不高’的结论!
      

  8.   

    select * from `tab` order by `id` desc limit 5select * from tab  where name='eee'order by id desc limit 5;

    select * from (select * from tab order by id desc limit 5)a
    where a.name='eee';
      

  9.   

    前N条的N,数值比较小时,可以用子查询,
    select * from (select * from `tab` order by `id` desc limit 5
    ) a  where name ='eee';如果N比较大,则考虑使用join连接
    select t.id,name from tab t INNER JOIN (select id from `tab` order by `id` desc limit 5
    ) a ON a.id=t.id where name ='eee';实际使用中,可以使用这两个语句,比较一下,哪个更快就用哪个。