6

考虑到下表没有任何主键,我可以选择每隔一行吗?

col1      col2
 2         a
 1         b
 3         c
 12        g

首先选择必须找到:2、3

第二个选择必须找到:1、12

那可能吗?

4

5 回答 5

7

以独特的 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

SQL Fiddle 的示例。

于 2013-02-19T19:32:34.950 回答
2

尝试这个。我已经根据下面链接的答案对其进行了改编。我在 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 行号

于 2013-02-19T19:38:31.787 回答
2

是的,可以使用临时变量

例子 :

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对于偶数数据

于 2017-07-19T12:21:11.530 回答
2

这对我有用。

    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 用于偶数行

于 2018-10-09T08:13:27.140 回答
1

这应该适用于 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 运算符。

这是示例小提琴:http ://sqlfiddle.com/#!2/cd31b/2

于 2013-02-19T19:32:42.190 回答