问题
Considering following table that doesn't have any primary key, can I select every other row?
col1 col2
2 a
1 b
3 c
12 g
first select must find: 2, 3
second select must find: 1, 12
is that possible?
回答1:
In unique MySQL fashion:
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
Example at SQL Fiddle.
回答2:
This works for me.
SET @row_number = 0;
select* from (
SELECT
(@row_number:=@row_number + 1) AS num, col1,col2
FROM
TABLE1
) as t WHERE num%2=0
You can use mod 1 for odd or mod 0 for even rows
回答3:
This should work for MySQL:
SELECT col1, col2
FROM (
SELECT col1, col2, @rowNumber:=@rowNumber+ 1 rn
FROM YourTable
JOIN (SELECT @rowNumber:= 0) r
) t
WHERE rn % 2 = 1
This uses % which is the MOD operator.
And here is the sample fiddle: http://sqlfiddle.com/#!2/cd31b/2
回答4:
Try this. I've adapted it from the answer linked below. I tested it on SQLFiddle and it appears to work.
http://sqlfiddle.com/#!2/0bccf/28
http://sqlfiddle.com/#!2/0bccf/29
Odd Rows:
SELECT x.*
FROM (
SELECT @rownum:=@rownum+1 rownum, t.*
FROM (SELECT @rownum:=0) r, table t
) x
WHERE MOD(x.rownum, 2) = 1
Even Rows:
SELECT x.*
FROM (
SELECT @rownum:=@rownum+1 rownum, t.*
FROM (SELECT @rownum:=0) r, table t
) x
WHERE MOD(x.rownum, 2) = 0
Adapted from: MySQL row number
回答5:
yes possible using temp variable
Example :
set @a := 0;
select * from car_m_city WHERE mod((@a:=@a+1), 2) = 1
Explanation :
here in sql we declare @a( set @a := 0;
) temp variable.(@a:=@a+1)
now @a
increment by 1.jsut like simple way to check odd or even
mod((@a:=@a+1), 2) = 1
for odd data
mod((@a:=@a+1), 2) = 0
for even data
来源:https://stackoverflow.com/questions/14965747/select-every-other-row-in-mysql-without-depending-on-any-id