mysql中如何取得left join的第二表中符合条件的第一条记录
[ 2013-09-06 14:59:59 | 作者: admin ]
有表一 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记录结合起来使用
注意:上面的tableB中有两条tid为2的记录,那么按我的要求只有前一条被提取。请高手帮忙
mysql里的正确答案如下,但是在sql server里面不支持
是说的有点乱,但目的就是达到以left join的左表为主,取右表的匹配项结合使用。其中右表符合条件的项可能不只一个,当不只一个时就按时间取第一个匹配项。
这样应该好理解吧?
中午我又试了一种方法,成功了。写出来请大侠看看有没有效率上的问题(已经能达到我要的效果了,只是我怕有不妥当的地方)
另外,很感谢大侠的帮忙。您给出的方法我现在就试试看。
我自己的笨办法是:
tid username title time txt
1 lily 我公司将进行xx培训 0809 大家快来。。。。
2 angus 关于秋游的通知 0810 我是新来的,大家好 <------这里取到了表二中符合条件的两项(或更多)中的第一项。难点解决了。
3 boss 这个月不发奖金 (空,因为tableB中无对应项)
4 vivi 新产品上市 0811 价格太贵啦。。。
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记录结合起来使用
注意:上面的tableB中有两条tid为2的记录,那么按我的要求只有前一条被提取。请高手帮忙
mysql里的正确答案如下,但是在sql server里面不支持
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.tid
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.tid
是说的有点乱,但目的就是达到以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 价格太贵啦。。。
评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2124
这篇日志没有评论。
此日志不可发表评论。