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