在子查询中隐藏 ROW_NUMBER()

Hide ROW_NUMBER() in subquery

我有一个查询

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

我想添加一个子句,其中每行仅 selects。为此,我需要将 row_number() 添加到子查询,并有一个子句 where rownumber % 2 = 0.

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

MySQL 中的行号是众所周知的颈椎病。

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

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

不要忘记这里的 ORDER BY 子句。如果没有显式排序,查询引擎可以随意随机化行的顺序 returns。

然后,您可以将该混乱用作子查询并使用 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.