2017-10-13 133 views
0

我使用这个查询来搜索标签相似MYSQL:基数冲突:1242子查询返回多于1行?

SELECT sites_id 
    FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
    AND sites_id!= ? 
    GROUP BY sites_id 
    HAVING COUNT(*) = ( SELECT COUNT(*) FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
     AND sites_id!= ? 
    GROUP BY sites_id 
    ORDER BY COUNT(*) DESC LIMIT 3) 

,但我得到一个错误

SQLSTATE [21000]:基数违规:1242子查询返回多个 比1排

有人知道为什么吗?

+0

你的子查询返回3行(由'ORDER BY COUNT(*)DESC LIMIT 3'),你必须只返回1或重写你的'having'声明' (#)在' – SatanDmytro

+0

好抓!所以我如何限制最终数组只有3个结果? shoudl我在限制范围外移动限制3? – Francesco

+0

你可以从表中添加一些数据并解释你想要的查询吗? – SatanDmytro

回答

0

正确的查询

SELECT sites_id 
    FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
    AND sites_id!= ? 
    GROUP BY sites_id 
    HAVING COUNT(*) = ( SELECT COUNT(*) FROM tags_to_sites 
    WHERE tags_id IN (SELECT tags_id FROM tags_to_sites WHERE sites_id= ?) 
     AND sites_id!= ? 
    GROUP BY sites_id 
    ORDER BY COUNT(*) DESC LIMIT 1) 
LIMIT 3 
相关问题