[英]MySQL - Sort and limit by table string
我有两个mysql表。 一个包含字符串的表,例如abc,def,ghi,jkl。 另一个表包含有关另一个表中的字符串的信息,例如“字母中的第三个字母”,“字母中的3-6个字母”,依此类推。 该表中的每个字符串可以有多个(约25行)。
我想从第二个表中为第一个字符串中的每个字符串返回3行,例如:
table1.string | table2.info
---------------------------
abc | blahblah
abc | blahblah2
def | blahblah
abc | blahblah3
def | blahblah2
def | blahblah3
我可以首先从table1获取字符串,执行foreach并执行更多查询以从table2获取限制3。 但这似乎对性能没有好处。
这样的查询看起来如何?
我不知道它是否适用于MySQL,但是在MSSQL中
SELECT table1.string, table2.info FROM table1 INNER JOIN table2 ON table2.stringID = table1.ID WHERE ROW_NUMBER() OVER (PARTITION BY table1.string ORDER BY table2.info) <= 3
您可以尝试一下(虽然速度不是很快):
SELECT string,info FROM
(
select t1.string, t2.info,
@n_rec := IF(@tmp!=t1.string,1,@n_rec+1) as nrec,
@tmp := t1.string
FROM
table_1 t1
INNER JOIN table_2 t2 ON t2.table_1_id = t1.id
order by t1.string
)yy
INNER JOIN (SELECT @n_rec := 0) X
INNER JOIN (SELECT @tmp:= null)Y
WHERE nrec <=3;
如果您需要包括来自table_1的记录而在table_2中没有任何信息,则可能要使用LEFT JOIN table_2
而不是INNER JOIN table_2
table_2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.