mysql:14870
From: 柴垣 <柴垣 <akiro@xxxxxxxxxx>>
Date: Fri, 22 May 2009 09:16:27 +0900
Subject: [mysql 14870] Re: @変数の動作について
NKさん、返信ありがとうございます。 > 同一セッションで2回目実行時に期待する結果になっているのは、 > 前回実行の最後にセットしている"c"が残っているからのようです。 当初から、mysql> set @code='x'; 等はその都度実行していたのですが、 投稿時には抜け落ちてしまっていました。申し訳ありませんでした。 メールのコードを私の環境で実行したのですが、やはり以下のように なります。送っていただいた結果と比較すると、@code の値が違います。 抽出と並べ替えの順番が違っているのでしょうか。 set @code=""; select @code,if(T.code=@code,'same','new') as Mark,@code:=T.code as Code,M.name from T left join M on T.code=M.code order by T.code; +-------+------+------+------+ | @code | Mark | Code | name | +-------+------+------+------+ | | new | a | ASM | | b | new | a | ASM | | b | new | a | ASM | | a | new | b | BAS | | c | new | b | BAS | | a | new | c | COM | | a | new | c | COM | +-------+------+------+------+ 7 rows in set (0.00 sec) こちらの環境は、WindowsXP mysql Ver 14.12 Distrib 5.0.45, for Win32 (ia32) Server version:5.0.45-community-nt MySQL Community Edition (GPL) です。 > ユーザ変数を使用される前に、初期化すると初回実行時でも期待されて > いる結果にはなりました。 > > mysql> set @code="";select @code,if(T.code=@code,'same','new') as > Mark,@code:=T.code as Code,M.name > from T left join M on T.code=M.code order by T.code; > Query OK, 0 rows affected > > +-------+------+------+------+ > | @code | Mark | Code | name | > +-------+------+------+------+ > | | new | a | ASM | > | a | same | a | ASM | > | a | same | a | ASM | > | a | new | b | BAS | > | b | same | b | BAS | > | b | new | c | COM | > | c | same | c | COM | > +-------+------+------+------+ > 7 rows in set _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 柴垣 akiro@xxxxxxxxxx _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
14868 2009-05-22 00:44 [柴垣 <akiro@xxxxxxxx] @変数の動作について 14869 2009-05-22 01:44 ┗["N.K." <nakai.kanako] -> 14870 2009-05-22 09:16 ┗[柴垣 <akiro@xxxxxxxx] 14871 2009-05-22 09:50 ┗["N.K." <nakai.kanako] 14872 2009-05-22 12:06 ┗[柴垣 <akiro@xxxxxxxx]