33

私はテーブルを持っています:student_marks

marks
-----
  44
  55
  64
  98
  76

期待される出力:

serial_number|marks
--------------------
  1          | 44
  2          | 55
  3          | 64
  4          | 98
  5          | 76

mysql ユーザー定義変数を使用すると、クエリを使用して実行できます。

 set  @a:=0;select @a:=@a+1 serial_number, marks from student_marks;

ユーザー定義変数を使用せずに msyql でこれを達成する方法はありますか?

4

11 に答える 11

75

ユーザー定義変数を使用したくない理由に基づいて、2 つのクエリ (1 つは初期化用、もう 1 つはそれを使用) を回避したいという理由に基づいて、次のように使用できます。

SELECT  @a:=@a+1 serial_number, 
        marks 
FROM    student_marks,
        (SELECT @a:= 0) AS a;
于 2012-06-19T07:45:10.153 に答える
1

列(c5)に数値xが含まれているテーブルがありました。同じ行をx回繰り返すSQL式が必要です。

私のテーブルAには以下が含まれます:

c1  c2  c3  c4  c5
16  1   2   16  3
16  1   2   17  2 
16  1   2   18  1

そして私は必要です:

c1  c2  c3  c4  c5  n
16  1   2   16  3   1
16  1   2   16  3   2
16  1   2   16  3   3
16  1   2   17  2   1
16  1   2   17  2   2
16  1   2   18  1   1

私はそれを式で解決しました:

SELECT
    c1, c2, c3, c4, c5, row_number AS n
FROM
    (
        SELECT
            @curRow := @curRow + 1 AS row_number
        FROM
            tablea
        JOIN (SELECT @curRow := 0) r
        WHERE
            @curRow < (
                SELECT
                    max(field1)
                FROM
                    tablea
            )
    ) AS vwtable2
LEFT JOIN tablea d ON vwtable2.row_number <= tablea.field1;
于 2015-10-21T20:19:31.567 に答える
0

いいえ、ありません。ただし、データベース側ではなく、プログラム側で serial_number を生成できます。

于 2012-06-19T04:43:03.267 に答える
0

自動インクリメント フィールドにしないのはなぜですか。

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

于 2012-06-19T04:44:37.267 に答える
-1

いいえ、これらの数値を含む列がない限り。

于 2012-06-19T04:46:32.670 に答える
-1

答えには非常に遅れていますが、2つのクエリを使用せず、結合を使用せず、サブクエリを使用せずにシーケンシャル ID を生成します。

SELECT *, (@cnt := if(@cnt IS NULL, 0,  @cnt) + 1) AS id FROM table_name;

乾杯

于 2015-08-01T13:40:17.470 に答える