2011-08-10 34 views
1

我想从加入中获得一个随机记录,但是我无法让它工作!有任何想法吗?它使用Microsoft Access 2003ms access 2003中加入的随机记录

table = members 
=============== 
memberID int 
name varchar 

table = testimonials 
==================== 
testimonialID int 
memberID int 
content memo 

select m.*, (SELECT t.content from testimonials t where t.memberID=m.memberID ORDER BY rnd(t.testimonialID)) as testimonialtext 
FROM members m; 

基本上,我需要每个成员的记录和该成员一个随机的告别赛。我还要补充一点,我已经试过了内加入太...

select m.*, t.content FROM members m 
INNER JOIN testimonials t ON m.memberID=t.memberID 
ORDER BY rnd(t.testimonialID) 

感谢您的帮助。

+0

究竟是什么不起作用?记录正在成倍增长? – heximal

+1

第一个查询返回“子查询中的无效备注,OLE或超链接对象't.content'”。这是一个备忘录字段,不是上面的文本。不知道如何解决这一个! –

+0

第二个查询返回什么?或者也会导致错误? – heximal

回答

0

尝试用TOP子句

select m.*, (SELECT top 1 t.content from testimonials t where t.memberID=m.memberID ORDER BY rnd(t.testimonialID)) as testimonialtext 
FROM members m; 

OK限制,那么我们可以这样做:

select 
    m.*, 
    t3.content 
FROM 
    members m, 
    (select 
     top 1 t.testimonialID, 
    from 
     testimonials t 
    where 
     t.memberID=m.memberID 
    order by 
     rnd(t.testimonialID) 
    ) t2, 
    testimonials t3 
where 
    t3.testimonialID = t2.testimonialID; 
+0

谢谢...虽然仍然产生无效的备忘录字段错误(如上面的评论) –

+2

从MS Access的帮助说:“一个子查询不能返回一个备忘录或OLE对象,它不能与一个备忘录或OLE对象在一个表达式“ –

+0

编辑答案 – heximal