选择 Mariadb 中除顶行以外的所有行
Posted
技术标签:
【中文标题】选择 Mariadb 中除顶行以外的所有行【英文标题】:Select all rows except top row in Maria DB 【发布时间】:2018-06-03 10:40:16 【问题描述】:如何从表中返回除第一行之外的所有行。这是我的sql语句:
SELECT * FROM article where article_no
NOT IN
(SELECT * FROM article order by article_no limit 1)
向上给定的SQL查询抛出错误:
此版本的 MariaDB 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”
【问题讨论】:
试试NOT IN (SELECT article_no FROM article order by article_no limit 1)
显示错误:#1064 - 您的 SQL 语法有错误;
错误在什么附近?
您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在“NOT IN (SELECT * FROM article order by article_no limit 1)”附近使用正确的语法@RiggsFolly
使用 OFFSET 关键字。见***.com/questions/2827029/mysql-skip-first-10-results
【参考方案1】:
子查询必须只选择您需要比较的列:
SELECT *
FROM article
WHERE article_no NOT IN (
SELECT article_no
FROM article
ORDER BY article_no
LIMIT 1
)
上面的查询可以在 MySQL 中工作,但不能在 MariaDB 中工作,doesn't currently support LIMIT
in subqueries。我会像这样重写子查询:
SELECT *
FROM article
WHERE article_no NOT IN (SELECT MIN(article_no) FROM article)
【讨论】:
并不是我太在意,但这有点..非常非常非常喜欢我的评论 嗯,在您发布答案之前,我的评论已经存在了 9 分钟!我猜你一定是个打字慢的人 @RiggsFolly - 我读了这个问题,但没有读到 cmets。我写了一个答案,因为还没有答案。然后我读了你的 cmets 并注意到你推荐了同样的东西。如果您愿意,我可以删除我的答案。 就像我说的“我感到厌烦” @RiggsFolly - 感谢修改,但实际上并没有解决在我的子查询中使用 limit 函数【参考方案2】:这会跳过具有最小值article_no
的行:
SELECT *
FROM article
ORDER BY article_no ASC
LIMIT 999999999
OFFSET 1;
也许您希望DESC
(而不是ASC
)跳过最大值?
请注意,NOT IN ( SELECT ... )
是一个非常低效的构造。
【讨论】:
这不起作用,因为OFFSET
不能在没有LIMIT
的情况下在MySQL或MariaDB中使用
@Sonny - 哎呀。我添加了具有巨大价值的 LIMIT
以使其发挥作用。以上是关于选择 Mariadb 中除顶行以外的所有行的主要内容,如果未能解决你的问题,请参考以下文章
在EXCEL中用VBA操作WORD表格:怎样选择一个表格中除第一行以外的任意连续行(比如第2到4行)?