我有一个问题
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
如果您不想显示行号,请将您的 SELECT
从 SELECT *
更改为 SELECT col, col, col
并离开输出 rownum
。
关于mysql - 在子查询中隐藏 ROW_NUMBER(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916562/