选择 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行)?

删除目录中除 .bat 以外的所有文件

提取R数据框中除数字以外的所有列[重复]

如何删除数组索引中除第0条以外的所有记录?

删除 MySQL 中除 One 之外的所有重复行? [复制]

有效地为集合中的每个类别选择顶行