Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ROW_NUMBER() ใน MySQL สำหรับการ INSERT ใช้ Variable แทนได้

MySQL (ก่อน 8.0) ไม่มี ROW_NUMBER() แต่สามารถจำลองได้ด้วย User-defined Variable

ไวยากรณ์

SELECT (@yourVariable := @yourVariable + 1) AS `anyAliasName`, yourColumnName1, yourColumnName2, ...N
FROM yourTableName, (SELECT @yourVariable := 0) AS anyAliasName;

ตัวอย่างการใช้งาน

สร้างตาราง:

mysql> create table RowNumberDemo (
    -> UserId int,
    -> UserName varchar(20)
    -> );
Query OK, 0 rows affected (0.74 sec)

เพิ่มข้อมูล:

mysql> insert into RowNumberDemo values(10,'John'),(50,'Carol'),(100,'Sam'),(150,'Mike'),(210,'Bob');

ข้อมูล:

+--------+----------+
| UserId | UserName |
+--------+----------+
|     10 | John     |
|     50 | Carol    |
|    100 | Sam      |
|    150 | Mike     |
|    210 | Bob      |
+--------+----------+

สร้าง Row Number:

mysql> SELECT 
    -> (@ROW_NUMBER := @ROW_NUMBER + 1) AS `ROW_NUMBER`, UserId, UserName
    -> FROM RowNumberDemo, (SELECT @ROW_NUMBER := 0) AS t;

ผลลัพธ์:

+------------+--------+----------+
| ROW_NUMBER | UserId | UserName |
+------------+--------+----------+
|          1 |     10 | John     |
|          2 |     50 | Carol    |
|          3 |    100 | Sam      |
|          4 |    150 | Mike     |
|          5 |    210 | Bob      |
+------------+--------+----------+

MySQL 8.0+

รองรับ Window Function ROW_NUMBER() OVER (ORDER BY ...) แบบ Native แล้ว:

SELECT ROW_NUMBER() OVER (ORDER BY UserId) AS row_num, UserId, UserName FROM RowNumberDemo;