首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对SQL内部联接查询应用限制

问对SQL内部联接查询应用限制
EN

Stack Overflow用户
提问于 2015-05-20 13:18:25
回答 3查看 6K关注 0票数 6

我有以下表格:

范畴

代码语言:javascript
复制
    id(int)
    1000  
    1001

图书

代码语言:javascript
复制
    id(int)  category(int) rating(float)
    3000     1000          5.0
    3001     1000          4.8
    3002     1000          3.0
    3003     1000          4.9
    3004     1001          4.9
    3005     1001          3.0

我想做的是从每个类别中拿出3本最优秀的书。在环顾四周并按照在LIMITing一个SQL连接上给出的答案后,我尝试了这个查询。

代码语言:javascript
复制
    SELECT * FROM book, category WHERE book.category=category.id AND book.id IN (SELECT book.id FROM book ORDER BY rating LIMIT 3)

但是它给出了以下错误

代码语言:javascript
复制
     #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

解决方案说需要最少的MySQL 5.1,我正在运行libmysql - 5.1.73。可能出什么事了?

EN

回答 3

Stack Overflow用户

发布于 2015-05-20 13:25:58

MySQL抱怨的是IN,而不是LIMIT。将IN更改为INNER JOIN,它应该可以工作。

类似于这样的查询:

代码语言:javascript
复制
SELECT * FROM book b, category INNER JOIN (SELECT id FROM book ORDER BY rating LIMIT 3) v
ON b.id=v.id
WHERE b.category=category.id;
票数 1
EN

Stack Overflow用户

发布于 2015-05-20 13:23:41

在某些子查询运算符的子查询中,MySQL不支持LIMIT:

代码语言:javascript
复制
'LIMIT & IN/ALL/ANY/SOME subquery'

,例如

代码语言:javascript
复制
mysql> SELECT * FROM t1
    ->   WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1);
ERROR 1235 (42000): This version of MySQL doesn't yet support
 'LIMIT & IN/ALL/ANY/SOME subquery'

读取子查询限制

票数 0
EN

Stack Overflow用户

发布于 2015-05-20 13:25:42

要做到这一点,有一个诀窍就是将LIMIT 3更改为LIMIT 0,3:如下所示:

代码语言:javascript
复制
 SELECT * FROM book, category WHERE book.category=category.id 
        AND book.id IN (SELECT book.id FROM book ORDER BY rating LIMIT 0,3)

来源 ^^

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30350889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档