问题描述
假设有一个表picture(id,address_id,name),其中一个address_id可关联多个picture.问题:假设有一批address_id,如何写一句sql根据这一批address_id在picture表中取出与之关联的记录,保证每一个address_id只能取出与之关联的2条记录.我想到的关键字是in 和limit,但是如何写出满足此需求的sql,还请各位赐教。问题补充:select * from picture where address_id in( select address_id from picture where address_id in(一批address_id) group by address_id having count(*)=2 ) 这个是有问题的,只能得到两条记录问题补充:"不是只取每个address_id关联的两条记录吗?这样从picture表取出来的每个address_id都有两条记录了呀!能不能再说明一下"主要是这个子句有问题:select address_id from picture where address_id in(一批address_id) group by address_id having count(*)=2 , 这里表示只能取出address_id个数等于两个的记录。 需求是不管有多少条记录,取出前两条。问题补充:to 81261686 (中级程序员):不好意思,可能我前面需求表达得不清楚
解决方案
看来也是没办法滴,不行的话就一个个address_id来查了,只要在同一个链接里对数据库也不会太损.非要做的话,可以考虑用mysql的存储过程.
解决方案二:
这个是有问题的,只能得到两条记录 不是只取每个address_id关联的两条记录吗?这样从picture表取出来的每个address_id都有两条记录了呀!能不能再说明一下
解决方案三:
limit在mysql中不能用在in中,可以考虑用游标,
解决方案四:
select * from picture where address_id in(select address_id from picturewhere address_id in(一批address_id)group by address_id having count(*)=2)这里用having包证取出来的address_id在picture表里只有两条记录,在用一个in去取picture表里只有两条address_id的记录