mysql - 在子查询中隐藏 ROW_NUMBER()

标签 mysql sql row-number

我有一个问题

Select *
From y
WHERE y.z = (
SELECT a, (adding rownumber here)
FROM b
)

我想添加一个子句,它只选择每隔一行。为此,我需要将 row_number() 添加到子查询,并有一个子句 where rownumber % 2 = 0。

我的问题是,我能否将 rownumber 添加到子查询的选择中并以某种方式隐藏它以使其不影响查询

最佳答案

MySQL 中的行编号是众所周知的难题。

您可以像这样在 MySQL 中对行进行编号。

           SELECT (@rownum := @rownum+1) rownum, b.*
             FROM b
             JOIN (SELECT @rownum := 0) init
            ORDER BY b.whatever

不要忘记此处的 ORDER BY 子句。如果没有显式排序,查询引擎可以随意随机化它返回的行的顺序。

然后,您可以将该困惑用作子查询并使用 rownum 执行操作。

 SELECT *
   FROM (
               SELECT (@rownum := @rownum+1) rownum, b.*
                 FROM b
                 JOIN (SELECT @rownum := 0) init
                ORDER BY b.whatever
         ) table_with_rownum
   WHERE rownum % 2 = 0

如果您不想显示行号,请将您的 SELECTSELECT * 更改为 SELECT col, col, col 并离开输出 rownum

关于mysql - 在子查询中隐藏 ROW_NUMBER(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916562/

相关文章:

mysql - 如何处理不同数据中心的多个EBS之间的数据库同步?

SQL 变量比静态值返回需要更长的时间

MySQL - 求和,但仅当所有条件满足时

java - 相当于Hibernate中的ResultSet.getRow()

mysql动态row_number生成问题

javascript - PHP形式的mysql插入语句

PHP 排名和选择操作

php - 这些功能在哪里? "variables"?来自?

mysql - MySQL 中的 ROW_NUMBER()

mysql在一个数据库中创建一个触发器来监听不同数据库中表的变化