我有一个MYSQL-Query必须去,但它返回错误'LIMIT & IN/ALL/ANY/SOME subquery
'
SELECT *
FROM page p
WHERE p.page_id IN (
SELECT c.cl_from
FROM categorylinks
WHERE c.cl_from = p.page_id
AND c.cl_to IN (
'Art-Rock-Band',
'Echo-Pop-Preisträger',
'Englische_Band',
'Genesis_(Band)',
'Grammy-Preisträger',
'Peter_Gabriel',
'Phil_Collins',
'Popband',
'Progressive-Rock-Band',
'Rock_and_Roll_Hall_of_Fame'
)
LIMIT 0,5
);
要解释我想要的东西:我希望只有IN
中的每个类别的5个结果 - Clausle。
MYSQL-版本:5.5.44-0ubuntu0.14.04.1 - (Ubuntu)
答案 0 :(得分:1)
您不能将IN
与具有limit
的子查询一起使用。最简单的(但可能不是最快的 - 不测试它)解决方案是在限制的附近添加第二个子查询,没有限制。
所以这个:
field IN (SELECT ... FROM x LIMIT 5)
会成为这个
field IN (SELECT * FROM (SELECT ... FROM x LIMIT 5) temp_table)
在您的情况下,您将成为以下内容:
SELECT *
FROM page p
WHERE p.page_id IN (SELECT * FROM(
SELECT c.cl_from
FROM categorylinks c
WHERE c.cl_from = p.page_id
AND c.cl_to IN (
'Art-Rock-Band',
'Echo-Pop-Preisträger',
'Englische_Band',
'Genesis_(Band)',
'Grammy-Preisträger',
'Peter_Gabriel',
'Phil_Collins',
'Popband',
'Progressive-Rock-Band',
'Rock_and_Roll_Hall_of_Fame'
)
LIMIT 0,5
) temp_table);
您还可以尝试在内部联接中转换子查询 - 这也应该有效。
答案 1 :(得分:0)
编辑: 似乎您的请求被误解了。
即使没有语法错误,您建议的查询也无法为每个类别返回5个结果。
为此,我建议你看一下这篇文章: Get top n records for each group of grouped results
根据错误消息,您不能在子查询中使用限制。
您应该考虑在查询中使用JOINS:
SELECT p.*
FROM categorylinks c
JOIN page p ON p.page_id = c.cl_from
WHERE c.cl_from = p.page_id
AND c.cl_to IN (
'Art-Rock-Band',
'Echo-Pop-Preisträger',
'Englische_Band',
'Genesis_(Band)',
'Grammy-Preisträger',
'Peter_Gabriel',
'Phil_Collins',
'Popband',
'Progressive-Rock-Band',
'Rock_and_Roll_Hall_of_Fame'
)
LIMIT 0,5;