select every other row in MySQL without depending on any ID?

后端 未结 5 945
独厮守ぢ
独厮守ぢ 2020-12-18 07:36

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               


        
相关标签:
5条回答
  • 2020-12-18 08:19

    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

    0 讨论(0)
  • 2020-12-18 08:25

    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

    0 讨论(0)
  • 2020-12-18 08:30

    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

    0 讨论(0)
  • 2020-12-18 08:35

    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

    0 讨论(0)
  • 2020-12-18 08:40

    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.

    0 讨论(0)
提交回复
热议问题