簡體   English   中英

MySQL:如何 select 表中除最后一行之外的所有行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM