2016-04-13 34 views
1

我試圖獲取一個人的最大ID號,將其加1,並存儲在一個變量中。我一直得到NULL,直到我將變量初始化爲0.現在我只是變成了0.你能幫我嗎?MySQL - 從列中獲取最大值,然後存儲在變量中

--Initialize @Var (probably unnecessary) 
SET @Var = 0; 

-- Increment Max Value by 1, store in @Var 
Select @Var = (MAX(Person_ID) + 1) From Person; 

--prints out the value 0???? 
Select @Var 

回答

3

MySQL在SELECT:=設定值。因此,使用這樣的:

Select @Var := (MAX(Person_ID) + 1) From Person; 

使用的=僅僅是一個布爾表達式。因此,SELECT(與=)將返回true/false(1/0),但不分配任何值。

+0

工作就像一個魅力。我很欣賞它,儘管這只是一個簡單的要求。 – FoxDonut

0

我想添加到@Gordon Linoff的答案,這將是獲得更好的性能,如果你通過爲person_id訂貨並選擇第一條記錄檢索最新ID:

Select top 1 person_id from person order by person_id DESC 
+1

我在此欣賞您的想法 - 但您如何確定訂購餐桌會比找到最大價值更快?我的意思是,不管我知道最大值總是在最下面,程序將執行線性搜索來找到最大值。我只是想知道線性搜索和排序是否會導致相同的性能?訂單將不得不從字面上交換除中間記錄以外的所有記錄?這有點修辭,但如果你能回答它,我會欣賞知識。 – FoxDonut

+0

MAX是一個分組功能,你需要分組(你沒有做)。當我們談論一張擁有數千條記錄的表格時,MAX和排序的區別更加明顯。您擁有的記錄越多,分組所需的時間越長,並找到最大值。 – Erick

+0

啊,我明白了。這現在有點意義了。我想知道那些「分組」錯誤是關於哈哈的 – FoxDonut

相關問題