2016-04-13 36 views
1

人の最大ID番号を取得し、1だけインクリメントして変数に格納しようとしています。私は変数を0に初期化するまでNULLを取得しています。今は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

私はあなたがPERSON_IDで注文すると、最初のレコードを選択することで、最新のIDを取得する場合、それは、パフォーマンスのために良いだろうという@Gordon Linoffの答えに追加したい:

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

私はここであなたの考えを感謝します - しかし、テーブルを注文することは、最大値を見つけるよりも速くなるでしょうか?私は、最大値が常に底にあることを知っていても、プログラムはその最大値を見つけるために線形検索を行います。線形検索と順序付けが同じパフォーマンスにならないのではないかと思います。注文は文字通り非常に中間のレコード以外のすべてのレコードを交換する必要がありますか?これはやや修辞的ですが、あなたがそれに答えることができれば、私はその知識に感謝します。 – FoxDonut

+0

MAXはグループ化関数であり、グループ化する必要があります(実行していない)。 by MAXとordering byの違いは、何千ものレコードを持つテーブルについて話しているときに顕著になります。レコードが多いほど、グループ化してMAX値を見つけるのに時間がかかります。 – Erick

+0

ああ、そうだ。それは今かなりの意味があります。私は、これらの「グループ化」エラーがすべてhahahに関するものであると思っていました – FoxDonut

関連する問題