[英]MySQL: How to select all rows from a table EXCEPT the last one
我有一個 N 行的表,我想要 select N-1 行。
如果可能的話,關於如何在一個查詢中執行此操作的建議..?
最后一行的ID是否最高? 如果是這樣,我認為這會奏效:
SELECT * FROM TABLE WHERE ID != (SELECT MAX(ID) FROM TABLE)
MySQL確實允許當前版本中的子選擇,對吧?
但是,在大多數情況下,如果您選擇了所有行,然后在應用程序中過濾掉不需要的數據,它可能會表現得更好。
SELECT DISTINCT t1.columns FROM table t1
INNER JOIN表t2 ON t1.id <t2.id
根據我的經驗,MySQL喜歡這種技術,可以追溯到幾個版本。
我在這里沒有看到的另一種技術是
SELECT * FROM table ORDER BY id DESC LIMIT 10000 OFFSET 1;
這將為您提供由id后代排序的記錄,除了第一個,即原始順序中的最后一個。
請注意,使用此方法,您將只獲取10000條記錄,但是此數字可以根據需要盡可能高,但不能省略。
這種方法的優點是你可以按你想要的任何方式訂購。
缺點是它為您提供從上到下排序的記錄。
最后值得注意的是,這里的其他方法效果很好
您必須先聲明一個變量,然后再設置它。 在 LIMIT 的幫助下,您將找到 n-1 行
像這樣:
DECLARE rowsNr INT DEFAULT 0;
SET rowsNr = SELECT (count(*) AS 'TOTAL_ROWS' FROM TABLE;
SET rowsNr = rowsNr -1;
SELECT * FROM Table WHERE ... LIMIT rowsNr;
如果它不適用於普通查詢,請嘗試將其放在 StoredProcedure 中
另一種方法是:
SELECT * FROM table WHERE ID <> LAST_INSERT_ID()
參考: http : //dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.