6

主キーを持たない次のテーブルを考慮して、1行おきに選択できますか?

col1      col2
 2         a
 1         b
 3         c
 12        g

最初の選択は見つける必要があります:2、3

2番目の選択は見つける必要があります: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フィドルでの例。

于 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

説明 :

set @a := 0;ここでSQLで、@ a( )一時変数を宣言します。奇数または偶数をチェックする簡単な方法のように、1.jsutずつインクリメントするようになりまし(@a:=@a+1)@a

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

奇数行にはmod1を使用し、偶数行にはmod0を使用できます

于 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 に答える