我有一个像
这样的查询Select *
From y
WHERE y.z = (
SELECT a, (adding rownumber here)
FROM b
)
我想添加一个只选择每隔一行的子句。为此,我需要将row_number()添加到子查询中,并且有一个rownumber%2 = 0的子句。
我的问题是,我是否能够将rownumber添加到子查询的选择中并以某种方式隐藏它以便它不会影响查询
答案 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,请将SELECT
从SELECT *
更改为SELECT col, col, col
,然后省略rownum
。