有个SQL语句想问一下:两个表
[A]字段:ID,UserName,GroupID
[B]字段: ID,Name,Re
select
 ...............  
from
   (select ID,Name,
   (select top 1 Name from B order by B.ID Desc)as B_Name,
   (select top 1 Re from B  order by B.ID Desc)as B_Re 
   from A   )x我那几个表太复杂没写上来,具体表不是这两个,但是SQL语句就是这个意思,我看了一下,在两个子查询中当数据很多的时候会占用很长的时间,不知道,可不可以查一次就可以调出来两个字段,B_Name,和,B_Re两字段要分开。
  还有当我要取最后一条数据的时候是不是非要order by XXX Desc 再用TOP 呀,我发现这样也很浪费时间,不知道有没有其它的方法,非常感谢!
  哪位兄弟帮忙解决100全分奉上。如果还不太清楚请留言。

解决方案 »

  1.   

    忘记说了,是用的Access数据库
      

  2.   

    我在SQL里整很快的 Access没试过
      

  3.   

    就是因为ACCESS呀,烦,帮帮忙呀
      

  4.   

    在最后的结果集ID,Name,B_Name,B_Re中,不管多少条记录,后两个字段的值是相同的,既然这样何必用子查询呢?
    select ID, Name form A
    select Top 1 Name, Re from B order by ID Desc
    分两次查询结构多清晰!
      

  5.   

    试试
    select * from A, (select top 1 Name as B_Name, Re as B_Re from B order by ID Desc) X
      

  6.   

    同意楼上的!!楼主,
    select
     ...............  
    from
       (select ID,Name,
       (select top 1 Name from B order by B.ID Desc)as B_Name,
       (select top 1 Re from B  order by B.ID Desc)as B_Re 
       from A   )x  你的这个语句中,两个TOP1语句中,既然都是根据B.ID来排序,那你至少这里就可以合并成一个TOP语句了;在查询A之后,在作为一个子表来查询,我觉得也是多余的,因为你没有和其他的数据表进行关联。
      

  7.   

    gulf1234(小顾) 我用作子查询是因为和A表有关联,忘记说了如果用一个查询语句,用什么办法来取得两个字段的值呢。
      

  8.   

    SELECT * FROM A LEFT JOIN B ON A.ID=B.ID
      

  9.   

    你的题目描述的很不清楚,看的我云里雾雾里云的.既然你要取 order by b.id desc的第一个值,也就是B.ID的最大值,你非得用什么top的,直接用MAX不可以吗?
      你是不是想要取出A、B两表中ID相同的项,其中B中的两个项目转成ID最大值的记录的值。
      select ...
      from
      (
        select B.ID,B.name,
       (select name from b where id =(select max(id) from b) ) as B_Name,
       (select re from b where id =(select max(id) from b) ) as B_Re
        from B,A
        where B.id = A.ID  ) X
      

  10.   

    select ...
      from
      (
        select B.ID,B.name,
       (select name from b where id =(select max(id) from b where b.Id=A.id)) as B_Name,
       (select re from b where id =(select max(id) from b where where b.Id=A.id)) as B_Re
        from A  ) X