h1. 需求表(A)
h1. 数据表(B)
根据表 A 里面的 internalname, worktime 关联 B 表,并随机取出关联后的数据(数量为 A 表中的 hx)
举例:
id-- internalname| 3-- abc 5-- abc 6-- abc
A 表中 abc 对应的 xh 为 3,所以随机取出 B 表中的三条记录 A 表中 ccc 对应的 xh 为 0, 所以不取
请教 sql 如何写?
这个问题有意思~~
可以先搞定如何不用limit关键字实现limit:
limit
set @i = 0; select @i := @i + 1 AS sort_id, id from users where @i < 5; Query OK, 0 rows affected (0.00 sec) +---------+-----+ | sort_id | id | +---------+-----+ | 1 | 194 | | 2 | 1 | | 3 | 5 | | 4 | 6 | | 5 | 7 | +---------+-----+ 5 rows in set (0.00 sec)
同理:
SET @i = 0;SELECT @i := @i +1 AS i, B.id, B.internalname FROM B INNER JOIN A ON B.internalname = A.internalname AND A.hx > @i WHERE internalname = 'abc';
嵌套查在 pg 不一定慢
select *, ( select array( select id from "B" where "B".internalname = "A".internalname and "B".worktime = "A".worktime order by random() limit "A".xh ) ) from "A"
更快的取样可以上 tablesample clause, 不过限制是只能用于 table 和 materialized views
#2 楼 @hooopo 有两个问题:
#4 楼 @luikore
select * from B join person on B.name = B.name and B.worktime = A.worktime order by rand() limit A.hx;
A.hx 取不到
#6 楼 @michael_roshen 不知道你这个是 xh 还是 hx ...
查两次挺好的
#7 楼 @luikore xh