在子查询中隐藏ROW_NUMBER()

时间:2016-12-01 17:14:37

标签: mysql sql row-number

我有一个像

这样的查询
Select *
From y
WHERE y.z = (
SELECT a, (adding rownumber here)
FROM b
)

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

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

1 个答案:

答案 0 :(得分:1)

MySQL中的Rownumbering是一个臭名昭着的痛苦。

您可以像这样在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

如果您不想显示rownumbers,请将SELECTSELECT *更改为SELECT col, col, col,然后省略rownum