我想选择MySQL表中的最后一行。我在该表中没有任何自动增量键。
public String getLastLeaveId() {
try {
Statement stmt = getConnection();
String sql="select leaveID from applied leave"; // here I want some logic that will fetch only leave_id from last row only
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//Table Structure --->
(leave_id varchar(50) primary key,emp_id varchar(40),birthday varchar(20),anniv varchar(20),rh varchar(200),total int,foriegn key(emp_id) reference employee);
答案 0 :(得分:2)
按照您现在订购的任何列的顺序降序,并在最后执行limit 0,1
。
答案 1 :(得分:0)
数据库表中没有隐式排序。如果您没有自动增量列,日期/时间列或插入行时遵循自然顺序的其他列,则仅限于使用其他伪造方式。
您没有在问题中显示表格结构,也没有说明您使用的是MyISAM还是InnoDB。 MyISAM按顺序存储行(通常),因此您可以使用Java中的ResultSet.last()
等内容来获取最后一行,但如果您不使用MyISAM,则不能依赖它。 InnoDB是默认存储引擎,以更高效的B-Tree顺序存储记录,并且根本不保留插入顺序,而是根据主键的顺序存储记录。
简而言之,您需要选择一个具有某种自然顺序(或发明一个)并按此顺序排序的字段。
答案 2 :(得分:0)
它可能有用
SELECT MAX(ID) FROM YourTable
// Similarly, ORDER BY with LIMIT:
SELECT ID FROM YourTable ORDER BY ID Desc Limit 1
答案 3 :(得分:0)
如果没有where子句和/或order by condition,则无法直接获取查询中的最后一行。您需要遍历所有行以在最后一行之前停止。
我看到的唯一正面选择是:
rs.last()
然后阅读。order by desc
子句。row_num
并运行选择
在row_num上使用desc命令。上面第4个选项的伪示例:
答案 4 :(得分:-1)
这就是你想要的。
SELECT * FROM table_name ORDER BY id DESC LIMIT 1