【问题标题】:how to use limits in IN clause sql如何在IN子句sql中使用限制
【发布时间】:2014-05-27 03:14:21
【问题描述】:

运行查询时

select BookID FROM Books_Collection WHERE CollectionID=22 AND BookID IN (SELECT BookID FROM Books LIMIT 0,10);

我得到错误:

ERROR 1235 (42000): This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

如何在 IN 子句中使用限制?如果不能,请告诉我如何在没有 IN 子句的情况下执行此操作。

【问题讨论】:

  • 您到底想完成什么?你能提供样本数据和期望的结果吗?

标签: mysql sql mariadb


【解决方案1】:

尝试使用join 来代替:

SELECT bc.BookID
FROM Books_Collection bc JOIN
     (SELECT DISTINCT BookID
      FROM Books
      LIMIT 0,10
     ) b
     ON bc.BookId = b.BookId
WHERE bc.CollectionID = 22;

一些笔记。首先,使用 limit 而不使用 order by 会给您任意 10 行。他们可以从一种处决变为另一种处决。你应该使用明确的order by

其次,假设BookId是一个有效的外键,那么你可能不需要加入Books。您可能只想:

SELECT DISTINCT bc.BookID
FROM Books_Collection bc 
WHERE bc.CollectionID = 22
LIMIT 0, 10;

【讨论】:

  • 谢谢他们都工作,你能解释一下什么是 bc 吗? books_collection 的缩写?
  • @user3247608 。 . .它被称为表别名。在这些查询中,它是表的缩写。 b 是子查询的别名,也是必需的。
猜你喜欢
  • 2014-02-06
  • 1970-01-01
  • 2011-06-10
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2020-07-15
相关资源
最近更新 更多