我有两个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。但这对表现来说似乎并不好。
这样的查询怎么样?
答案 0 :(得分:0)
我不知道它是否适用于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
答案 1 :(得分:0)
你可以试试这个(虽然它不是很快):
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
。