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

SELECT ทุกแถวยกเว้นแถวสุดท้ายใน MySQL

ใช้ != (หรือ <>) ร่วมกับ Subquery หา MAX ID เพื่อตัดแถวสุดท้ายออก

ไวยากรณ์

SELECT * FROM yourTableName WHERE yourIdColumn != (SELECT MAX(yourIdColumn) FROM yourTableName);

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

สร้างตาราง:

mysql> create table AllRecordsExceptLastOne (
    -> Id int NOT NULL AUTO_INCREMENT, UserName varchar(10), UserAge int, PRIMARY KEY(Id)
    -> );

เพิ่มข้อมูล 6 แถว:

mysql> INSERT INTO AllRecordsExceptLastOne(UserName,UserAge) VALUES 
('John',21),('Carol',28),('Mike',22),('Sam',29),('David',27),('Larry',24);

ข้อมูลทั้งหมด:

+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
|  1 | John     |      21 |
|  2 | Carol    |      28 |
|  3 | Mike     |      22 |
|  4 | Sam      |      29 |
|  5 | David    |      27 |
|  6 | Larry    |      24 |
+----+----------+---------+

SELECT ยกเว้นแถวสุดท้าย (Id=6):

mysql> SELECT * FROM AllRecordsExceptLastOne 
    -> WHERE Id != (SELECT MAX(Id) FROM AllRecordsExceptLastOne);

ผลลัพธ์ (5 แถว):

+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
|  1 | John     |      21 |
|  2 | Carol    |      28 |
|  3 | Mike     |      22 |
|  4 | Sam      |      29 |
|  5 | David    |      27 |
+----+----------+---------+

วิธีอื่น (MySQL 8.0+)

SELECT * FROM AllRecordsExceptLastOne ORDER BY Id DESC LIMIT 1 OFFSET 1;

หรือใช้ Window Function:

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Id DESC) AS rn FROM AllRecordsExceptLastOne
) t WHERE rn > 1;