有表一 tableA
tid     username     title
1         lily       我公司将进行xx培训
2         angus      关于秋游的通知
3         boss       这个月不发奖金
4         vivi       新产品上市
表二 tableB
tid      time     txt
1         0809    大家快来。
2         0810    我是新来的,大家好
2         0810    我知道你是新来的
4         0811    价格太贵啦我想取得相同tid下的tableA的title跟对应的tableB中符合条件的第一条txt记录结合起来使用
我用以下语句达不到效果
SELECT tableA.*, tableB.txt FROM tableA  LEFT JOIN tableB ON tableA.tid = tableB.tid ORDER BY tableB.time DESC注意:上面的tableB中有两条tid为2的记录,那么按我的要求只有前一条被提取。请高手帮忙

解决方案 »

  1.   

    SELECT tableA.*, tableB.txt FROM tableA  LEFT JOIN tableB ON tableA.tid = tableB.tid ORDER BY tableB.time DESC limit 1;
    十一快乐!
      

  2.   

    谢谢,十一快乐!
    谢谢您的帮忙,但是这可能不是我要的答案,因为这样写的话,的确是只能得到一条记录——可能我说的不够清楚,我想要的结果应该是下面的样子的:tid    username    title                time    txt 
    1        lily      我公司将进行xx培训   0809    大家快来。
    2        angus      关于秋游的通知      0810    我是新来的,大家好  <------这里取的是表二即tableB中符合条件的两项中的第一项。我就是不会这儿
    3        boss      这个月不发奖金       (空,因为tableB中无对应项)
    4        vivi      新产品上市            0811    价格太贵啦 
      

  3.   

    也就是说,并非只取符合条件的第一条联合查询后的结果,而是取10条 20条等等,只是当tableB中符合ON条件的项超过1条时,只取第一题去与tableA匹配输出联合查询的结果
      

  4.   


    select   a.*,
             ifnull(b.time,'')  as time,
             ifnull(b.txt,'')   as txt
    from     tableA as a
             left join tableB as b
               on a.tid = b.tid
    group by a.tid
    order by a.tidquery result
    tid username title time txt
    1  lily  我公司将进行xx培训  0809  大家快来。
    2  angus  关于秋游的通知  0810  我是新来的,大家好
    3  boss  这个月不发奖金      
    4  vivi  新产品上市  0811  价格太贵啦
      

  5.   

    是说的有点乱,但目的就是达到以left join的左表为主,取右表的匹配项结合使用。其中右表符合条件的项可能不只一个,当不只一个时就按时间取第一个匹配项。
    这样应该好理解吧?
    中午我又试了一种方法,成功了。写出来请大侠看看有没有效率上的问题(已经能达到我要的效果了,只是我怕有不妥当的地方)
    另外,很感谢大侠的帮忙。您给出的方法我现在就试试看。我自己的笨办法是:
    select a.*, b.txt,b.time from tableA. as a left join ( select tid min(time)from tableB group by tid limit 20) as b on a.tid = b.tid 
    得出:
    tid    username    title                time    txt 
    1        lily      我公司将进行xx培训  0809    大家快来。 
    2        angus      关于秋游的通知      0810    我是新来的,大家好  <------这里取到了表二中符合条件的两项(或更多)中的第一项。难点解决了。
    3        boss      这个月不发奖金      (空,因为tableB中无对应项) 
    4        vivi      新产品上市            0811    价格太贵啦 
      

  6.   

    刚刚试了yueliangdao0608大侠的方法,的确是行的,而且很清晰,代码也短。所以结贴了,大侠的答案100分。
    只是小妹不明白为什么ifnull(b.time,'')as time ifnull(b.txt,'')as txt 的原理,能解释一下吗?谢谢
      

  7.   

    yueliangdao0608
    的SQL执行了下,提示 ORA-00979