考虑到下表没有任何主键,我可以选择每隔一行吗?
col1 col2
2 a
1 b
3 c
12 g
首先选择必须找到:2、3
第二个选择必须找到:1、12
那可能吗?
以独特的 MySQL 方式:
select *
from (
select *
, @rn := @rn + 1 as rn
from Table1
join (select @rn := 0) i
) s
where rn mod 2 = 0 -- Use = 1 for the other set
尝试这个。我已经根据下面链接的答案对其进行了改编。我在 SQLFiddle 上对其进行了测试,它似乎可以工作。
http://sqlfiddle.com/#!2/0bccf/28
http://sqlfiddle.com/#!2/0bccf/29
奇数行:
SELECT x.*
FROM (
SELECT @rownum:=@rownum+1 rownum, t.*
FROM (SELECT @rownum:=0) r, table t
) x
WHERE MOD(x.rownum, 2) = 1
偶数行:
SELECT x.*
FROM (
SELECT @rownum:=@rownum+1 rownum, t.*
FROM (SELECT @rownum:=0) r, table t
) x
WHERE MOD(x.rownum, 2) = 0
改编自: MySQL 行号
是的,可以使用临时变量
例子 :
set @a := 0;
select * from car_m_city WHERE mod((@a:=@a+1), 2) = 1
解释 :
在 sql 中,我们声明了 @a( set @a := 0;
) 临时变量。(@a:=@a+1)
现在@a
增加 1.jsut 就像检查奇数或偶数的简单方法一样
mod((@a:=@a+1), 2) = 1
对于奇数数据
mod((@a:=@a+1), 2) = 0
对于偶数数据
这对我有用。
SET @row_number = 0;
select* from (
SELECT
(@row_number:=@row_number + 1) AS num, col1,col2
FROM
TABLE1
) as t WHERE num%2=0
您可以将 mod 1 用于奇数行或 mod 0 用于偶数行
这应该适用于 MySQL:
SELECT col1, col2
FROM (
SELECT col1, col2, @rowNumber:=@rowNumber+ 1 rn
FROM YourTable
JOIN (SELECT @rowNumber:= 0) r
) t
WHERE rn % 2 = 1
这使用 % ,它是 MOD 运算符。